{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "view-in-github",
    "colab_type": "text"
   },
   "source": [
    "<a href=\"https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/OpenEnv_gpt_oss_(20B)_Reinforcement_Learning_2048_Game_BF16.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "# <img width=\"35\" height=\"35\" alt=\"image\" src=\"https://github.com/user-attachments/assets/2700a971-e5d6-4036-b03f-2f89c9791609\" /> OpenEnv: Agentic Execution Environments\n",
    "We're using the new [OpenEnv](https://github.com/meta-pytorch/OpenEnv) library which has over 2000+ environments for RL!\n",
    "\n",
    "<div class=\"align-center\">\n",
    "<a href=\"https://unsloth.ai/\"><img src=\"https://github.com/unslothai/unsloth/raw/main/images/unsloth%20new%20logo.png\" width=\"115\"></a>\n",
    "<a href=\"https://discord.gg/unsloth\"><img src=\"https://github.com/unslothai/unsloth/raw/main/images/Discord button.png\" width=\"145\"></a>\n",
    "<a href=\"https://docs.unsloth.ai/\"><img src=\"https://github.com/unslothai/unsloth/blob/main/images/documentation%20green%20button.png?raw=true\" width=\"125\"></a></a> Join Discord if you need help + \u2b50 <i>Star us on <a href=\"https://github.com/unslothai/unsloth\">Github</a> </i> \u2b50\n",
    "</div>\n",
    "\n",
    "To install Unsloth your local device, follow [our guide](https://docs.unsloth.ai/get-started/install-and-update)."
   ],
   "metadata": {
    "id": "GtkTGCuh6QZy"
   }
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "hzPgFeIkZn9q"
   },
   "source": [
    "# Goal: Make gpt-oss play games with Reinforcement Learning\n",
    "\n",
    "Our goal is to make OpenAI's open model gpt-oss 20b play the 2048 game with reinforcement learning. We want the model to devise a strategy to play 2048, and we will run this strategy until we win or lose.\n",
    "\n",
    "<img src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/f/f9/2048_win.png/500px-2048_win.png\" height=300 />"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "31KIMLJLnHET"
   },
   "source": [
    "# Installation\n",
    "We'll be using [Unsloth](https://github.com/unslothai/unsloth) to do RL on GPT-OSS 20B, and [OpenEnv](https://github.com/meta-pytorch/OpenEnv) for the environment interactions. Unsloth saves 70% VRAM usage and makes reinforcement learning 2 to 6x faster!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "CGoDZwcunHEU"
   },
   "outputs": [],
   "source": [
    "%%capture\n",
    "import os, importlib.util\n",
    "!pip install --upgrade -qqq uv\n",
    "if importlib.util.find_spec(\"torch\") is None or \"COLAB_\" in \"\".join(os.environ.keys()):\n",
    "    try: import numpy; get_numpy = f\"numpy=={numpy.__version__}\"\n",
    "    except: get_numpy = \"numpy\"\n",
    "    !uv pip install -qqq \\\n",
    "        \"torch>=2.8.0\" \"triton>=3.4.0\" {get_numpy} torchvision bitsandbytes \"transformers==4.56.2\" trackio \\\n",
    "        \"unsloth_zoo[base] @ git+https://github.com/unslothai/unsloth-zoo\" \\\n",
    "        \"unsloth[base] @ git+https://github.com/unslothai/unsloth\" \\\n",
    "        git+https://github.com/triton-lang/triton.git@05b2c186c1b6c9a08375389d5efe9cb4c401c075#subdirectory=python/triton_kernels\n",
    "elif importlib.util.find_spec(\"unsloth\") is None:\n",
    "    !uv pip install -qqq unsloth trackio\n",
    "!uv pip install --upgrade --no-deps transformers==4.56.2 tokenizers trl==0.22.2 unsloth unsloth_zoo"
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "We will then install [OpenEnv](https://github.com/meta-pytorch/OpenEnv) from source:"
   ],
   "metadata": {
    "id": "OjifwNNZ7bMx"
   }
  },
  {
   "cell_type": "code",
   "source": [
    "%%capture\n",
    "!pip install -qqq fastapi uvicorn requests open_spiel\n",
    "!git clone https://github.com/meta-pytorch/OpenEnv.git > /dev/null 2>&1\n",
    "%cd OpenEnv\n",
    "import subprocess, sys, os\n",
    "from pathlib import Path\n",
    "sys.path.insert(0, './src')\n",
    "working_directory = str(Path.cwd().parent.absolute() / \"OpenEnv\")"
   ],
   "metadata": {
    "id": "1yzMMSLR7dNj"
   },
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "CcLYwLyQLADE"
   },
   "source": [
    "We'll load GPT-OSS 20B and set some parameters:\n",
    "* `max_seq_length = 768` The maximum context length of the model. Increasing it will use more memory.\n",
    "* `lora_rank = 4` The larger this number, the smarter the RL process, but the slower and more memory usage`load_in_16bit` will be faster but will need a 64GB GPU or more (MI300)\n",
    "* `offload_embedding = True` New Unsloth optimization which moves the embedding to CPU RAM, reducing VRAM by 1GB."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 688,
     "referenced_widgets": [
      "5bf4aba9c1644533a0da3498890c968b",
      "c35fa56428cf44a5b40dc72b97c6e1b8",
      "8a66e3473d9d43b2830c1b04b98aab59",
      "bc79bd08b1be479e92ea598172d4eb38",
      "fdfd1fbbb5b8436fb0bd832e8fbdcb1a",
      "889854bfc7be4cd7b239f888248143fb",
      "d06d6940187349749ec1d8fc6df83368",
      "0c29df9994bd446ea64b6fd12c72df5c",
      "be548d1cb2a74c8d8d1704f83f2b0b71",
      "53d1cd9cd1254f44a605e4bc8c0b2e09",
      "fe54248588764fdca9a71edaa2fd33dc",
      "4b721360c9344ee5be0eb5fcf7e9bc71",
      "ac56e65282de4cf697ef764bfbdbe073",
      "d21cf40090c14992a31e01b51fe098af",
      "60b0adbf515c4560b05f8f735e2b9c16",
      "0ebc4f1a3996476ca66df1e490202ba8",
      "561736050fd84bcab3365fc68885f59c",
      "50b3771a4a144a5798d6782a967c5f24",
      "d7829f4a99f9485da26f82c98c59d5d4",
      "e8d618b69e324a489c6754099b17ba01",
      "75177debbe8b47dc807057ee748932d5",
      "7af1634381ff4595abbcc53d8084c174",
      "6e0d900ac8464c9e9dbe45bd2c680ced",
      "fd64551b69f54525b5289f8ff48e07d2",
      "bec362a63b3e435f84218f3186719f67",
      "b88aee6989584d8b8cb7907719032455",
      "1598c7eb05454a17860d1883e72e330f",
      "1274511cbe584b1fa8012f06e7ce6725",
      "f8baf26da54a4fdbb7ad060723aa3193",
      "5b82f4ecf28046e0ac83e5c8441f56b3",
      "3606d1496cf0463e9b76ef7511dd4e18",
      "af1a6c191c9140d1a0408b12805121ab",
      "0c975c4cf0d4438b978f7c6dcc5b9f42",
      "d156a7fab56749638fb42cf8c1feb0f7",
      "35513f7ae8c04263a590486de15ecd21",
      "710a38315c4349e7b09180ece8172c44",
      "5d023b1e51184789832030b298ad837f",
      "13233dd974e2455b990bfc3e5a9f0329",
      "1d942aecf17c45f49012a808813736e8",
      "54c688b688d34276acbaed77040ce375",
      "e8d5a44b1d924fd78f516bf1ed84472e",
      "7c50545149bd44449c1cb5bf36252c52",
      "df1351b818da4b93bb6c88ab7d9dd32b",
      "dd3a402129fc40f3838ebeb11f5f770f",
      "66fe47c90a8a4f7abad4c56baafc4313",
      "8b6ea137f3304df3a11f601a2c8d036c",
      "69b7154f12c9481fa5461d11db995305",
      "26683c63f497494b813a1a9fa63b629d",
      "70dbf69140d34d9a96e226514a2051be",
      "4f3cf4c378db49b0a85bf367d0fd7ff0",
      "a6f09c0ae12a4869bc6faffcf6d5e7ed",
      "2d666c00ff51448faf340be6fdc794fe",
      "5b0e0e2d9f424f1ea64c9ad36842c3a7",
      "6d0fa90134544a6bac60021307818edb",
      "dc6bc2539cec43ddb0076b4ada70e859",
      "3d8a9f7a35f847c69d442f11ce30c9a6",
      "eda71020a3e44b06ab605aafeffbd79c",
      "8a651636925144989f704a0acfa4db98",
      "4f19aaa6b61a4ceda2b2d6a6035c278e",
      "8000cd32f8e14421bd24d29cf0305acf",
      "c3526f40d8424a7390cb9a8adf9ad44e",
      "e723541a11e34b4d993035733de95db3",
      "2206b5ba14c440f9ba45eae555bb8c5c",
      "2b3231a98005442aad2ce3a87783aab7",
      "d0c1ed73cd6b4117b47a89b30ff3a966",
      "835017cc625a416c8de50c61a949ce82",
      "5434f2380b9d4f4eaeb546cf84812d19",
      "aaedac48923046768b44e3d4d844bb12",
      "da31629201cb4776ad53288495f7dfde",
      "f3365711a36b4a51929deec9264f3e6d",
      "2758947ba48a4c56880e002d7a6eae17",
      "8904f31ab79a4204a4c9215843b41a56",
      "6bf64d482f064f669fadb5725cb29568",
      "dc552770ba1e48e88216961589692b96",
      "46ebc75c2d5d4e9ab4420d64b10b2911",
      "8d6cedf14a0f44b9bdfd0a494037e0aa",
      "1f988f8d8d5143e09a191e000561eb8a",
      "b6ade4c7b5994f73a098021d1c78e0fe",
      "a73f82f099e944b68d485212f4a21356",
      "2a362eb07e364e3a95fd3a0c2499b954",
      "282c2898db5c445d83fa60015b5586a4",
      "f0a64fe4d44644718fa457250bee4a0e",
      "169f602046834898936aacc5134c0acc",
      "ddac49c882c34456afd40c3c6026b4f4",
      "6d373bbe2c3446b5be5d9a186058efc8",
      "34592df2e61143c1845c834c928bbccc",
      "a74bf6b5f579495fbcb161c23b1b09bc",
      "0a27f46c28b0458f960cdb96fb569fbe",
      "6218c6233a104aa9ba5fd3a89c4bb32b",
      "c962891050864a27a06b3257d39218b0",
      "95c69e5a55504be098ad7d7b9334efa9",
      "c6e50485de784ef291a28125e6fcf394",
      "4929f73251c243e29ae00de77c34b9d4",
      "2f5a7867f59f4830a7499223f3589029",
      "fef0a5d82ba74307a5c72e204c3ed391",
      "c492fdac185d45e285080556808aa66e",
      "2d8812df8f18443e8f85e8a811c76a39",
      "70378127da9d45bbb85a304bd57bfa22",
      "29561bf8c8744abb865570a3117c1b06",
      "8d214427020645cb9afaae009b178df4",
      "7f7e817cadf9426580e1ac8f90955e00",
      "20406d14609446d394a628ddf044b819",
      "d57bf34601ed40c8b905d329a86972b9",
      "cdaf36709c02408c83cb1253b3df748a",
      "4692c109062940f4b3d5b30519364915",
      "6cfe735cc3c541bdb4e70fc115b4d4dc",
      "53aebc6467024398aa0761f832d6742c",
      "d2475adca5b84ccca70a4cdc17bc7d5b",
      "add3f5f8918a44989f331179e79b20f5",
      "4bc1fd345e1c4d0693cf92ae50a821d5",
      "3f4f2de9819e43cdb0190e3f237e0543",
      "da26af23bef448fc917b2341fdad9ee4",
      "aed6ead750fb40d0aa7a952b81c7d83b",
      "84908601a5d04f06ab108d1dce1b3dd9",
      "aa6ee084bf0142d29ff0dda6561d901c",
      "645a96eca4ae4196b1296e6f467fa1a2",
      "7000146e85964b70bd5026afe5ac4e24",
      "a9a176d1db484fcd814d7360c5c5a5ef",
      "a8457852ed6643c3b3ab27947376a37f",
      "6157316ffec24bdfb28dc23db5339c89",
      "c7481c2bc72142f998bd094d59a7d688",
      "2efabeddb0194391b58397d8fc5e3959",
      "9845c5893a4a48d4aafbf8c0b77041f0",
      "8a70c310d8384dc8a16f7b7700b04001",
      "d1b3f92d520d4ecab9549195447bdd1d",
      "27e68bf49787461e93430550db80f764",
      "decca7dd83b246f889b44c2ae30b4805",
      "55ea8e7874064f2788a2cd89f5de2142",
      "57c7f59f7f62484aa37d203c8fc781b2",
      "0a7a4aa2d1124987af64d81acf030934",
      "29c0704effcf4deab797c6386f8301ab",
      "c7d1f12ee17b46e39c617138e390d70f",
      "6de5fab961b9462a928dc0bed6ac5bfe",
      "251360eb5e6044a88d16c5d16e611c3f",
      "7598552f2109483b93b4ec6a8d996c7f",
      "293d7eb78e954dbe9b7b85a05a3e1643",
      "54c131c2a7b540868bb0a77675de3189",
      "fe476fbe0ef149aa81e43bbe54679a1f",
      "1e3755c8a331443eb7318588f055802d",
      "7e64a42f0edd479b829693d68cfa5fa1",
      "b03555559a5e426198a5dd34e73103fa",
      "3ac04aa6fb1b4ee0836931f051d9d675",
      "1525171e95b34ba3afe72c101ffdb284",
      "b5b772dfa8da48f68d53b246b1b00ab2",
      "7b4e3e877d654edcbe7e7ef5bb6c9438",
      "8a77c53d573e4c81a2171d4bfd27abeb",
      "79fc8ee42e2f4d949161d1189ad1f266",
      "769309e37fef48e3982f4bb1511dded7",
      "92f7130be8434cf0a3657db52a41251c",
      "78cd75c30f5041c1823f62829c3398ca",
      "79222877a7604315be6d2a60080ca2bf",
      "71a0c964a3c14ec99f2244a3b3817608",
      "d6f06c8f63264db7a8739f3065db4fcb",
      "f8d23b83308d470cbc3ba4df6535ba6f",
      "1352ee0682c54e55a5781c6fc8abba12",
      "f4c7c5b4b6ef4458a1ed9b0b7a8781c1",
      "2458c933147c43028b5c0802a18bf66d",
      "8868df0036954450b23d363b4d2d081f",
      "3c53f484a22040dc889492741ef9e6a6",
      "e1544e07d24a47a498609fdd162e7c9c",
      "1fce39ba490145a48f9d4eaa8e0f79bb",
      "31ee3c6676e5477e81a4bb8dd4764916",
      "71aa1f4c38eb45cd8a24b14f2cb3dc66",
      "9f3860f7bbe64cf88fcddd9aa4f317ce",
      "7d3a9f3fd67d40bfba2f69495420d2c8",
      "f5dfe218c4fd4349a2e16d20e9ae0316",
      "a74b68761f844f2baebadc4b67211040",
      "df9faed5a91a4848a3ba6b3c5a7a6181",
      "81805e68fa824e6daec3f4d550913add",
      "66146935dff9461b8140791bce9f4ccd",
      "4548bdaf76da46cd9fbc6c550bf9bdb1",
      "9883600b16204520ad13119c10f07bd0",
      "94f0aaac800a4c1d9fbb6b2be9a5ba93",
      "125d64feafcc4f13a94de2f8c51f80a1",
      "e7d1b7926c1e4b5e8710a56c379e01ab",
      "11ed6ad87ebb4fc2ab8537c283d15630"
     ]
    },
    "id": "DkIvEkIIkEyB",
    "outputId": "10580b2e-f8ec-4e3f-ea91-ee881b7c593f"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "\ud83e\udda5 Unsloth: Will patch your computer to enable 2x faster free finetuning.\n"
     ]
    },
    {
     "output_type": "stream",
     "name": "stderr",
     "text": [
      "WARNING:torchao:Skipping import of cpp extensions due to incompatible torch version 2.8.0+cu126 for torchao version 0.14.1             Please see https://github.com/pytorch/ao/issues/2919 for more info\n"
     ]
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "\ud83e\udda5 Unsloth Zoo will now patch everything to make training faster!\n",
      "==((====))==  Unsloth 2025.10.10: Fast Gpt_Oss patching. Transformers: 4.56.2.\n",
      "   \\\\   /|    Num GPUs = 1. Max memory: 79.318 GB. Platform: Linux.\n",
      "O^O/ \\_/ \\    Torch: 2.8.0+cu126. Triton: 3.4.0\n",
      "\\        /    Bfloat16 = TRUE. FA [Xformers = None. FA2 = False]\n",
      " \"-____-\"     Free license: http://github.com/unslothai/unsloth\n",
      "Unsloth: Fast downloading is enabled - ignore downloading bars which are red colored!\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "model.safetensors.index.json: 0.00B [00:00, ?B/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "5bf4aba9c1644533a0da3498890c968b"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "model-00001-of-00009.safetensors:   0%|          | 0.00/4.50G [00:00<?, ?B/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "4b721360c9344ee5be0eb5fcf7e9bc71"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "model-00002-of-00009.safetensors:   0%|          | 0.00/4.94G [00:00<?, ?B/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "6e0d900ac8464c9e9dbe45bd2c680ced"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "model-00003-of-00009.safetensors:   0%|          | 0.00/4.94G [00:00<?, ?B/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "d156a7fab56749638fb42cf8c1feb0f7"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "model-00004-of-00009.safetensors:   0%|          | 0.00/4.94G [00:00<?, ?B/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "66fe47c90a8a4f7abad4c56baafc4313"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "model-00005-of-00009.safetensors:   0%|          | 0.00/4.94G [00:00<?, ?B/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "3d8a9f7a35f847c69d442f11ce30c9a6"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "model-00006-of-00009.safetensors:   0%|          | 0.00/4.94G [00:00<?, ?B/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "5434f2380b9d4f4eaeb546cf84812d19"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "model-00007-of-00009.safetensors:   0%|          | 0.00/4.94G [00:00<?, ?B/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "b6ade4c7b5994f73a098021d1c78e0fe"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "model-00008-of-00009.safetensors:   0%|          | 0.00/4.94G [00:00<?, ?B/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "6218c6233a104aa9ba5fd3a89c4bb32b"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "model-00009-of-00009.safetensors:   0%|          | 0.00/2.75G [00:00<?, ?B/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "8d214427020645cb9afaae009b178df4"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "Loading checkpoint shards:   0%|          | 0/9 [00:00<?, ?it/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "3f4f2de9819e43cdb0190e3f237e0543"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "generation_config.json:   0%|          | 0.00/165 [00:00<?, ?B/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "2efabeddb0194391b58397d8fc5e3959"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "tokenizer_config.json: 0.00B [00:00, ?B/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "6de5fab961b9462a928dc0bed6ac5bfe"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "tokenizer.json:   0%|          | 0.00/27.9M [00:00<?, ?B/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "b5b772dfa8da48f68d53b246b1b00ab2"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "special_tokens_map.json:   0%|          | 0.00/440 [00:00<?, ?B/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "1352ee0682c54e55a5781c6fc8abba12"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "chat_template.jinja: 0.00B [00:00, ?B/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "f5dfe218c4fd4349a2e16d20e9ae0316"
      }
     },
     "metadata": {}
    }
   ],
   "source": [
    "from unsloth import FastLanguageModel\n",
    "import torch\n",
    "max_seq_length = 768 # Can increase for longer RL output\n",
    "lora_rank = 4        # Larger rank = smarter, but slower\n",
    "model, tokenizer = FastLanguageModel.from_pretrained(\n",
    "    model_name = \"unsloth/gpt-oss-20b-BF16\",\n",
    "    load_in_4bit = False,\n",
    "    max_seq_length = max_seq_length,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "TfeUs-lQJDSq"
   },
   "source": [
    "To do efficient RL, we will use [LoRA](https://arxiv.org/abs/2106.09685), which allows us to only add 1 to 5% of extra weights to the model for finetuning purposes. This allows us to save memory usage by over 60%, and yet it retains good accuracy. Read Unsloth's [GPT-OSS RL Guide](https://docs.unsloth.ai/new/gpt-oss-reinforcement-learning) for more details."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "8rGa-o3HJCo1",
    "outputId": "82e744f1-37d5-4c72-e955-b42d1fdd526b"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Unsloth: Making `model.base_model.model.model` require gradients\n"
     ]
    }
   ],
   "source": [
    "model = FastLanguageModel.get_peft_model(\n",
    "    model,\n",
    "    r = lora_rank, # Choose any number > 0 ! Suggested 8, 16, 32, 64, 128\n",
    "    target_modules = [\n",
    "        \"q_proj\", \"k_proj\", \"v_proj\", \"o_proj\",\n",
    "        \"gate_proj\", \"up_proj\", \"down_proj\",\n",
    "    ],\n",
    "    lora_alpha = lora_rank*2, # *2 speeds up training\n",
    "    use_gradient_checkpointing = \"unsloth\", # Reduces memory usage\n",
    "    random_state = 3407,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "N0QnO9_YJBOI"
   },
   "source": [
    "# 2048 game environment with OpenEnv\n",
    "\n",
    "We first launch an OpenEnv process and import it! This will allows us to see how the 2048 implementation looks like!"
   ]
  },
  {
   "cell_type": "code",
   "source": [
    "from envs.openspiel_env import OpenSpielEnv\n",
    "from envs.openspiel_env.models import OpenSpielAction, OpenSpielObservation"
   ],
   "metadata": {
    "id": "hQrG81XV87-7"
   },
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "markdown",
   "source": [
    "We'll be using Unsloth's OpenEnv implementation and wrapping the `launch_openenv` with some setup arguments:"
   ],
   "metadata": {
    "id": "-WT0Zu0IcN_r"
   }
  },
  {
   "cell_type": "code",
   "source": [
    "global port\n",
    "global openenv_process\n",
    "port = 9000\n",
    "openenv_process = None\n",
    "server = \"envs.openspiel_env.server.app:app\"\n",
    "environment = {\n",
    "    **os.environ,\n",
    "    \"PYTHONPATH\": f\"{working_directory}/src\",\n",
    "    \"OPENSPIEL_GAME\": \"2048\",\n",
    "    \"OPENSPIEL_AGENT_PLAYER\": \"0\",\n",
    "    \"OPENSPIEL_OPPONENT_POLICY\": \"random\",\n",
    "}\n",
    "\n",
    "# Augment Unsloth's OpenEnv creation function\n",
    "import functools\n",
    "from unsloth import is_port_open, launch_openenv\n",
    "launch_openenv = functools.partial(\n",
    "    launch_openenv,\n",
    "    working_directory = working_directory,\n",
    "    server = server,\n",
    "    environment = environment,\n",
    "    openenv_class = OpenSpielEnv,\n",
    ")"
   ],
   "metadata": {
    "id": "zBIye94T8djG"
   },
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "markdown",
   "source": [
    "Let's see how the current 2048 game state looks like:"
   ],
   "metadata": {
    "id": "P3rMiKLl9Ro2"
   }
  },
  {
   "cell_type": "code",
   "source": [
    "port, openenv_process = launch_openenv(port, openenv_process)\n",
    "result = openenv_process.reset()\n",
    "current_state = result.observation\n",
    "current_state"
   ],
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "uBPx0Hho9Xi1",
    "outputId": "44ad443f-a8dd-475c-dce4-09df38bed223"
   },
   "execution_count": null,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Unsloth: Creating new OpenEnv process at port = 12724.........\n"
     ]
    },
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "OpenSpielObservation(done=False, reward=None, metadata={}, info_state=[2.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], legal_actions=[1, 2, 3], game_phase='initial', current_player_id=0, opponent_last_action=None)"
      ]
     },
     "metadata": {},
     "execution_count": 7
    }
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "First let's convert the state into a list of list of numbers!"
   ],
   "metadata": {
    "id": "4Qz1tRVTAii8"
   }
  },
  {
   "cell_type": "code",
   "source": [
    "import numpy as np\n",
    "def convert_to_board(current_state):\n",
    "    n = len(current_state.info_state)\n",
    "    size = int(np.sqrt(n))\n",
    "    board = np.array_split(np.array(current_state.info_state, dtype = int), size)\n",
    "    board = [x.tolist() for x in board]\n",
    "    return board, size\n",
    "convert_to_board(current_state)"
   ],
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "7PVeoKW2AmKr",
    "outputId": "eef2bd8c-866b-4036-bf56-534c0028e2ae"
   },
   "execution_count": null,
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "([[2, 0, 2, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], 4)"
      ]
     },
     "metadata": {},
     "execution_count": 8
    }
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "We also want to pretty print the game board!"
   ],
   "metadata": {
    "id": "hCS56yu29dsG"
   }
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "cellView": "form",
    "id": "D9CI4jtgL5mw"
   },
   "outputs": [],
   "source": [
    "#@title (Collapsible) 2048 Game Renderer\n",
    "def render_board(obs, colors: bool = True, border: bool = True, dot_for_zero: bool = True) -> str:\n",
    "    \"\"\"\n",
    "    Pretty-print the board with colors that scale from 0 up to self.target.\n",
    "    Uses ANSI 256-color codes (works in most terminals). Set colors=False to disable.\n",
    "    \"\"\"\n",
    "    import math\n",
    "    b, size = convert_to_board(obs)\n",
    "    mx = max((max(row) for row in b), default=0)\n",
    "    cell_w = max(3, len(str(mx)))\n",
    "\n",
    "    RESET = \"\\x1b[0m\"\n",
    "\n",
    "    # A smooth-ish gradient from cool \u2192 warm\n",
    "    # (blue/cyan/green \u2192 yellow/orange/red). Tweak or expand as you like.\n",
    "    GRAD = [33, 39, 45, 51, 50, 49, 48, 47, 46, 82, 118, 154, 190, 226, 220, 214, 208, 202, 196]\n",
    "    ZERO_FG = 239  # dim gray\n",
    "\n",
    "    def color_code(v: int) -> str:\n",
    "        if not colors:\n",
    "            return \"\"\n",
    "        if v == 0:\n",
    "            return f\"\\x1b[38;5;{ZERO_FG}m\"\n",
    "        # Normalize by exponent relative to target: r in [0,1]\n",
    "        t = max(2, 2048)  # safety; avoid log2(1)\n",
    "        # Guard: if v is not a power of two or is <1, handle gracefully\n",
    "        try:\n",
    "            r = max(0.0, min(1.0, math.log2(v) / math.log2(t)))\n",
    "        except ValueError:\n",
    "            r = 0.0\n",
    "        idx = int(round(r * (len(GRAD) - 1)))\n",
    "        return f\"\\x1b[38;5;{GRAD[idx]}m\"\n",
    "\n",
    "    def fmt(v: int) -> str:\n",
    "        s = \".\" if (v == 0 and dot_for_zero) else str(v)\n",
    "        s = s.rjust(cell_w)\n",
    "        return color_code(v) + s + (RESET if colors else \"\")\n",
    "\n",
    "    def hline(left: str, mid: str, right: str) -> str:\n",
    "        return left + mid.join(\"\u2500\" * cell_w for _ in range(size)) + right\n",
    "\n",
    "    rows = []\n",
    "    if border:\n",
    "        rows.append(hline(\"\u250c\", \"\u252c\", \"\u2510\"))\n",
    "    for r in range(size):\n",
    "        content = \"\u2502\".join(fmt(v) for v in b[r])\n",
    "        rows.append((\"\u2502\" + content + \"\u2502\") if border else content)\n",
    "        if border:\n",
    "            rows.append(hline(\"\u2514\" if r == size - 1 else \"\u251c\",\n",
    "                            \"\u2534\" if r == size - 1 else \"\u253c\",\n",
    "                            \"\u2518\" if r == size - 1 else \"\u2524\"))\n",
    "    return \"\\n\".join(rows)"
   ]
  },
  {
   "cell_type": "code",
   "source": [
    "print(render_board(current_state))"
   ],
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "DAJE2LUo9oRR",
    "outputId": "56e97621-b093-4c20-f366-74b4da1a2e82"
   },
   "execution_count": null,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "\u250c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2510\n",
      "\u2502\u001b[38;5;45m  2\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;45m  2\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u2514\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2518\n"
     ]
    }
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "We can see the `legal_actions` ie what you can take as `[0, 1, 2, 3]` Let's try doing the action `0`."
   ],
   "metadata": {
    "id": "0AhUa4hW-Dji"
   }
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "b-gSgthFI_wq",
    "outputId": "47730df3-8e11-444c-929b-98b7ac7141bc"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "\u250c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2510\n",
      "\u2502\u001b[38;5;45m  2\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;45m  2\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u2514\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2518\n"
     ]
    }
   ],
   "source": [
    "action = OpenSpielAction(action_id = 0, game_name = \"2048\")\n",
    "result = openenv_process.step(action)\n",
    "current_state = result.observation\n",
    "print(render_board(current_state))"
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "So it looks like `0` is a move up action! Let's try `1`."
   ],
   "metadata": {
    "id": "lPSNb8-A-iPn"
   }
  },
  {
   "cell_type": "code",
   "source": [
    "action = OpenSpielAction(action_id = 1, game_name = \"2048\")\n",
    "result = openenv_process.step(action)\n",
    "current_state = result.observation\n",
    "print(render_board(current_state))"
   ],
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "IUel11Tc-oLB",
    "outputId": "c3c83d33-0e01-48f8-92bb-9e442e9c3125"
   },
   "execution_count": null,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "\u250c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2510\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;51m  4\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;45m  2\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u2514\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2518\n"
     ]
    }
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "`1` is a move right action. And `2`:"
   ],
   "metadata": {
    "id": "nUlOshVe-qNL"
   }
  },
  {
   "cell_type": "code",
   "source": [
    "action = OpenSpielAction(action_id = 2, game_name = \"2048\")\n",
    "result = openenv_process.step(action)\n",
    "current_state = result.observation\n",
    "print(render_board(current_state))"
   ],
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "XU09-KA3-sqs",
    "outputId": "c159f0df-8392-495d-903d-bd3fd39f4638"
   },
   "execution_count": null,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "\u250c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2510\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;45m  2\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;45m  2\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;51m  4\u001b[0m\u2502\n",
      "\u2514\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2518\n"
     ]
    }
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "`2` is a move down. And I guess `3` is just move left!"
   ],
   "metadata": {
    "id": "X2r7Zqw9-u-d"
   }
  },
  {
   "cell_type": "code",
   "source": [
    "action = OpenSpielAction(action_id = 3, game_name = \"2048\")\n",
    "result = openenv_process.step(action)\n",
    "current_state = result.observation\n",
    "print(render_board(current_state))"
   ],
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "pFgspqn6-zd2",
    "outputId": "9d00cd13-b0ce-4430-ca6a-103174449c42"
   },
   "execution_count": null,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "\u250c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2510\n",
      "\u2502\u001b[38;5;45m  2\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;45m  2\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;45m  2\u001b[0m\u2502\u001b[38;5;51m  4\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u2514\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2518\n"
     ]
    }
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "We can also print the game status which indicates if no more moves are possible, and also the possible actions you can take!"
   ],
   "metadata": {
    "id": "RJP4TsDq-2ft"
   }
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "MEa2ngmrvfNm",
    "outputId": "06ad07a4-c2aa-4f2d-d188-b7529440f6aa"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "False\n",
      "[0, 1, 2, 3]\n"
     ]
    }
   ],
   "source": [
    "print(current_state.done)\n",
    "print(current_state.legal_actions)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "VR6czU96cpxf"
   },
   "source": [
    "# RL Environment Setup\n",
    "\n",
    "We'll set up a function to accept some strategy that'll emit an action within `0123` and check the game state.\n",
    "\n",
    "We'll also add a timer to only execute the stratgegy for 2 seconds maximum, otherwise it might never terminate!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "tdgjnf-8z_kr"
   },
   "outputs": [],
   "source": [
    "from typing import Callable\n",
    "from unsloth import execute_with_time_limit\n",
    "import itertools\n",
    "\n",
    "def _execute_strategy(strategy, current_state : OpenSpielObservation):\n",
    "    assert callable(strategy)\n",
    "\n",
    "    steps = 0\n",
    "    total_reward = 0\n",
    "    while not current_state.done:\n",
    "        board, size = convert_to_board(current_state)\n",
    "        action = strategy(board)\n",
    "        try:\n",
    "            action = int(action)\n",
    "        except:\n",
    "            return steps, False\n",
    "        steps += 1\n",
    "        if type(action) is not int or action not in current_state.legal_actions:\n",
    "            return steps, max(itertools.chain.from_iterable(board)) == 2048\n",
    "\n",
    "        global port, openenv_process\n",
    "        port, openenv_process = launch_openenv(port, openenv_process)\n",
    "        action = OpenSpielAction(action_id = action, game_name = \"2048\")\n",
    "        result = openenv_process.step(action)\n",
    "        current_state = result.observation\n",
    "        if result.reward is not None:\n",
    "            total_reward += result.reward\n",
    "    return steps, max(itertools.chain.from_iterable(board)) == 2048\n",
    "\n",
    "@execute_with_time_limit(2)\n",
    "def execute_strategy(strategy : Callable, current_state : OpenSpielObservation):\n",
    "    return _execute_strategy(strategy, current_state)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "ywh0HizI9ayE"
   },
   "source": [
    "Let's make a generic strategy to just hit `3`. We should expect this generic strategy to fail:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "5bkhqoZc0IO8",
    "outputId": "cdf7ecc4-2e61-4a89-b2e0-8650a173fec7"
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "(3, False)"
      ]
     },
     "metadata": {},
     "execution_count": 17
    }
   ],
   "source": [
    "def always_move_left(board):\n",
    "    return 3\n",
    "\n",
    "# Reset OpenEnv to an initial state!\n",
    "port, openenv_process = launch_openenv(port, openenv_process)\n",
    "result = openenv_process.reset()\n",
    "current_state = result.observation\n",
    "try:\n",
    "    steps, if_done = execute_strategy(always_move_left, current_state)\n",
    "except TimeoutError as e:\n",
    "    print(f\"Timed out with error = {str(e)}\")\n",
    "\n",
    "steps, if_done"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "dkuHVdB09sgf"
   },
   "source": [
    "To allow longer strategies for GPT-OSS Reinforcement Learning, we shall allow a 5 second timer."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "SK-LfzsA9wbW"
   },
   "outputs": [],
   "source": [
    "@execute_with_time_limit(5)\n",
    "def execute_strategy(strategy : Callable, current_state : OpenSpielObservation):\n",
    "    return _execute_strategy(strategy, current_state)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "tRhLV_bZMYxy"
   },
   "source": [
    "# Code Execution\n",
    "\n",
    "To execute and create a new Python function, we first have to check if the function does not call other global variables or cheat. This is called `countering reward hacking` since we don't want the function to cheat.\n",
    "\n",
    "For example the below piece of code is fine, since it only imports Python level functions. We use `check_python_modules`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "zz80kvg6M4BG",
    "outputId": "05788b0a-6464-429d-f8ff-1b32b4e7f12b"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Only Python imports? True\n",
      "{'stdlib': ['math', 'typing'], 'non_stdlib': [], 'relative_imports': 0}\n"
     ]
    }
   ],
   "source": [
    "from unsloth import check_python_modules\n",
    "\n",
    "sample = \"\"\"\n",
    "def strategy(board):\n",
    "    import math\n",
    "    from typing import Callable\n",
    "    return \"0\"\n",
    "\"\"\"\n",
    "ok, info = check_python_modules(sample)\n",
    "print(\"Only Python imports?\", ok)\n",
    "print(info)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "bZzVWgKQ-VIg"
   },
   "source": [
    "For the below piece of code, since we import `numpy`, we should not allow the execution:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "Z89Jw1KB-Ux7",
    "outputId": "490133f4-c9ac-4df5-b874-5977772f3c66"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Only Python imports? False\n",
      "{'stdlib': [], 'non_stdlib': ['numpy'], 'relative_imports': 0}\n"
     ]
    }
   ],
   "source": [
    "sample = \"\"\"\n",
    "def strategy(board):\n",
    "    from numpy import matmul\n",
    "    return \"0\"\n",
    "\"\"\"\n",
    "ok, info = check_python_modules(sample)\n",
    "print(\"Only Python imports?\", ok)\n",
    "print(info)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "SDSrjOTLVyQm"
   },
   "source": [
    "We also disallow global variable access. We'll use Unsloth's `create_locked_down_function` function\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "GcmYAmohVqw2",
    "outputId": "5f707b8f-6295-42b2-8126-509650dc7b6d"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "name 'np' is not defined\n"
     ]
    }
   ],
   "source": [
    "from unsloth import create_locked_down_function\n",
    "function = \"\"\"\n",
    "def import_numpy():\n",
    "    np.matmul\n",
    "    print(\"Success\")\n",
    "\"\"\"\n",
    "f = create_locked_down_function(function)\n",
    "try:\n",
    "    f()\n",
    "except Exception as e:\n",
    "    print(str(e))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "5tJKwLUgZsRq",
    "outputId": "885a9596-a052-444f-8f8d-0c71bda89899"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "60\n"
     ]
    }
   ],
   "source": [
    "from unsloth import create_locked_down_function\n",
    "function = \"\"\"\n",
    "def add(a, b):\n",
    "    def adder(a):\n",
    "        return a + b\n",
    "    return adder(b) + b\n",
    "\"\"\"\n",
    "f = create_locked_down_function(function)\n",
    "try:\n",
    "    print(f(10, 20))\n",
    "except Exception as e:\n",
    "    print(str(e))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "8CzwCyXIPK04"
   },
   "source": [
    "# Data & RL task setup\n",
    "\n",
    "We now have to create a prompt to tell the model to create a strategy for the 2048 game. You can customize this to some other task for another RL task."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "B-2RRE4HMrQO",
    "outputId": "b45dd3e3-5583-4a29-b46d-127fd8382e32"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Create a new short 2048 strategy using only native Python code.\n",
      "You are given a list of list of numbers for the current board state.\n",
      "Output one action for \"0\", \"1\", \"2\", \"3\" on what is the optimal next step.\n",
      "Output your new short function in backticks using the format below:\n",
      "```python\n",
      "def strategy(board):\n",
      "    return \"0\" # Example\n",
      "```\n",
      "All helper functions should be inside def strategy. Only output the short function `strategy`.\n"
     ]
    }
   ],
   "source": [
    "prompt = \"\"\"\n",
    "Create a new short 2048 strategy using only native Python code.\n",
    "You are given a list of list of numbers for the current board state.\n",
    "Output one action for \"0\", \"1\", \"2\", \"3\" on what is the optimal next step.\n",
    "Output your new short function in backticks using the format below:\n",
    "```python\n",
    "def strategy(board):\n",
    "    return \"0\" # Example\n",
    "```\n",
    "All helper functions should be inside def strategy. Only output the short function `strategy`.\n",
    "\"\"\".strip()\n",
    "print(prompt)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "MIdudFUodN4i"
   },
   "source": [
    "First, let's prompt GPT-OSS without RL and see how it goes:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "9HJxrS76h3Ds",
    "outputId": "9a669693-719e-4a98-a527-6c7394b04708"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI.\n",
      "Knowledge cutoff: 2024-06\n",
      "Current date: 2025-10-27\n",
      "\n",
      "Reasoning: low\n",
      "\n",
      "# Valid channels: analysis, commentary, final. Channel must be included for every message.\n",
      "Calls to these tools must go to the commentary channel: 'functions'.<|end|><|start|>user<|message|>Create a new short 2048 strategy using only native Python code.\n",
      "You are given a list of list of numbers for the current board state.\n",
      "Output one action for \"0\", \"1\", \"2\", \"3\" on what is the optimal next step.\n",
      "Output your new short function in backticks using the format below:\n",
      "```python\n",
      "def strategy(board):\n",
      "    return \"0\" # Example\n",
      "```\n",
      "All helper functions should be inside def strategy. Only output the short function `strategy`.<|end|><|start|>assistant<|channel|>analysis<|message|>Need simple heuristic: pick move that maximizes merged tiles? use quick scan.<|end|><|start|>assistant<|channel|>final<|message|>```python\n",
      "def strategy(board):\n",
      "    '''Return a move that merges tiles or keeps board unchanged.'''\n",
      "    import copy, itertools\n",
      "    def shift_line(line, rev=False):\n",
      "        if rev: line = line[::-1]\n",
      "        new = [x for x in line if x]\n",
      "        merged = []\n",
      "        i = 0\n",
      "        while i < len(new):\n",
      "            if i+1 < len(new) and new[i]==new[i+1]:\n",
      "                merged.append(new[i]*2); i+=2\n",
      "            else:\n",
      "                merged.append(new[i]); i+=1\n",
      "        merged += [0]*(4-len(merged))\n",
      "        if rev: merged = merged[::-1]\n",
      "        return merged\n",
      "    def play(b, dir):\n",
      "        if dir==0:   # up\n",
      "            nb=[[0]*4 for _ in range(4)]\n",
      "            for c in range(4):\n",
      "                col=[b[r][c] for r in range(4)]\n",
      "                nb=[row+[0] for row in nb]\n",
      "                for r in range(4): nb[r][c]=shift_line(col)[r]\n",
      "            return nb\n",
      "        if dir==1:   # right\n",
      "            nb=[[shift_line(row,True)[::-1] for row in b]]\n",
      "        if dir==2:   # down\n",
      "            nb=[[0]*4 for _ in range(4)]\n",
      "            for c in range(4):\n",
      "                col=[b[r][c] for r in range(4)][::-1]\n",
      "                merged=shift_line(col)\n",
      "                for r in range(4): nb[3-r][c]=merged[r]\n",
      "            return nb\n",
      "        if dir==3:   # left\n",
      "            nb=[[shift_line(row)[::-1] for row in b]]\n",
      "        return nb\n",
      "    def score(b):\n",
      "        s=0\n",
      "        for r in range(4):\n",
      "            for c in range(4):\n",
      "                v=b[r][c]\n",
      "                if v>0: s+=v*(1 if v==2 else 2)\n",
      "        return s\n",
      "    best, best_d=score(board),None\n",
      "    for d in range(4):\n",
      "        nb=play(board,d)\n",
      "        if nb!=board:\n",
      "            if score(nb)>best:\n",
      "                best, best_d=score(nb), d\n",
      "    return str(best_d if best_d is not None else 0)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "text = tokenizer.apply_chat_template(\n",
    "    [{\"role\": \"user\", \"content\": prompt}],\n",
    "    tokenize = False,\n",
    "    add_generation_prompt = True,\n",
    "    reasoning_effort = \"low\",\n",
    ")\n",
    "\n",
    "from transformers import TextStreamer\n",
    "_ = model.generate(\n",
    "    **tokenizer(text, return_tensors = \"pt\").to(\"cuda\"),\n",
    "    temperature = 1.0,\n",
    "    max_new_tokens = 512,\n",
    "    streamer = TextStreamer(tokenizer, skip_prompt = False),\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "iknaWZNudTNq"
   },
   "source": [
    "# Reward functions\n",
    "\n",
    "We now design a `extract_function` function which simply extracts the function wrapped in 3 back ticks.\n",
    "\n",
    "And 3 reward functions:\n",
    "\n",
    "1. `function_works` which rewards the model if the strategy is a valid Python function.\n",
    "2. `no_cheating` which checks if the function imported other modules, and if it did, we penalize it.\n",
    "3. `strategy_succeeds` which checks if the game strategy actually succeeds in attaining 2048 after running the auto-generated strategy."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "8JJGXKdJ-Zl_",
    "outputId": "4e6078c7-5b83-4a34-d76c-9475052d7ebe"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "def strategy(board):\n",
      "    return \"0\" # Example\n"
     ]
    }
   ],
   "source": [
    "def extract_function(text):\n",
    "    if text.count(\"```\") >= 2:\n",
    "        first = text.find(\"```\") + 3\n",
    "        second = text.find(\"```\", first)\n",
    "        fx = text[first : second].strip()\n",
    "        fx = fx.removeprefix(\"python\\n\")\n",
    "        fx = fx[fx.find(\"def\"):]\n",
    "        if fx.startswith(\"def strategy(board):\"): return fx\n",
    "    return None\n",
    "print(extract_function(prompt))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "KLXEcf_HSJlI"
   },
   "source": [
    "Below is our `function_works` reward function which uses Python's `exec` but guarded by not allowing leakage of local and global variables. We can also use `check_python_modules` first to check if there are errors before even executing the function:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "h3-B0IIsS56S",
    "outputId": "1d5b0e9f-d91a-476b-8ea3-8c698cc95dec"
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "(False,\n",
       " {'error': \"SyntaxError: expected '(' (<unknown>, line 1)\",\n",
       "  'stdlib': [],\n",
       "  'non_stdlib': [],\n",
       "  'relative_imports': 0})"
      ]
     },
     "metadata": {},
     "execution_count": 26
    }
   ],
   "source": [
    "ok, info = check_python_modules(\"def a\")\n",
    "ok, info"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "qgFNXORy-lpO"
   },
   "outputs": [],
   "source": [
    "def function_works(completions, **kwargs):\n",
    "    scores = []\n",
    "    for completion in completions:\n",
    "        score = 0\n",
    "        response = completion[0][\"content\"]\n",
    "        function = extract_function(response)\n",
    "        if function is not None:\n",
    "            ok, info = check_python_modules(function)\n",
    "        if function is None or \"error\" in info:\n",
    "            score = -2.0\n",
    "        else:\n",
    "            try:\n",
    "                new_strategy = create_locked_down_function(function)\n",
    "                score = 1.0\n",
    "            except:\n",
    "                score = -0.5\n",
    "        scores.append(score)\n",
    "    return scores"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Gf69i2WT-m4K"
   },
   "source": [
    "`no_cheating` checks if the function cheated since it might have imported Numpy or other functions:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "cUfHzCVx-nGK"
   },
   "outputs": [],
   "source": [
    "def no_cheating(completions, **kwargs):\n",
    "    scores = []\n",
    "    for completion in completions:\n",
    "        score = 0\n",
    "        response = completion[0][\"content\"]\n",
    "        function = extract_function(response)\n",
    "        if function is not None:\n",
    "            ok, info = check_python_modules(function)\n",
    "            scores.append(1.0 if ok else -20.0) # Penalize heavily!\n",
    "        else:\n",
    "            scores.append(-1.0) # Failed creating function\n",
    "    return scores"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "slnqWG3FTror"
   },
   "source": [
    "Next `strategy_succeeds` checks if the strategy actually allows the game to terminate. Imagine if the strategy simply returned \"0\" which would fail after a time limit of 10 seconds.\n",
    "\n",
    "We also add a global `PRINTER` to print out the strategy and board state."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "sNi129lYTpZ2"
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "global PRINTER\n",
    "PRINTER = 0\n",
    "def strategy_succeeds(completions, **kwargs):\n",
    "    global PRINTER\n",
    "    scores = []\n",
    "    for completion in completions:\n",
    "        printed = False\n",
    "        score = 0\n",
    "        response = completion[0][\"content\"]\n",
    "        function = extract_function(response)\n",
    "        if PRINTER % 5 == 0:\n",
    "            printed = True\n",
    "            print(function)\n",
    "        PRINTER += 1\n",
    "        if function is not None:\n",
    "            ok, info = check_python_modules(function)\n",
    "        if function is None or \"error\" in info:\n",
    "            scores.append(0)\n",
    "            continue\n",
    "        try:\n",
    "            new_strategy = create_locked_down_function(function)\n",
    "        except:\n",
    "            scores.append(0)\n",
    "            continue\n",
    "        try:\n",
    "            # Reset OpenEnv to an initial state!\n",
    "            global port, openenv_process\n",
    "            port, openenv_process = launch_openenv(port, openenv_process)\n",
    "            result = openenv_process.reset()\n",
    "            current_state = result.observation\n",
    "            steps, if_done = execute_strategy(new_strategy, current_state)\n",
    "            print(f\"Steps = {steps} If Done = {if_done}\")\n",
    "            if printed is False:\n",
    "                print(function)\n",
    "            print(render_board(current_state))\n",
    "            if if_done:\n",
    "                scores.append(20.0) # Success - massively reward!\n",
    "            else:\n",
    "                scores.append(2.0) # Failed but function works!\n",
    "        except TimeoutError as e:\n",
    "            print(\"Timeout\")\n",
    "            scores.append(-1.0) # Failed with timeout\n",
    "        except Exception as e:\n",
    "            print(f\"Exception = {str(e)}\")\n",
    "            scores.append(-3.0) # Failed\n",
    "    return scores"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "TCpSxtvSeAG_"
   },
   "source": [
    "We'll now create the dataset which includes a replica of our prompt. Remember to add a reasoning effort of low! You can choose high reasoning mode, but this'll only work on more memory GPUs like MI300s."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "Ldf6SjLHVPRv",
    "outputId": "15c87591-ce8b-4104-9765-b97f908c55a3"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "181\n"
     ]
    },
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "{'prompt': [{'content': 'Create a new short 2048 strategy using only native Python code.\\nYou are given a list of list of numbers for the current board state.\\nOutput one action for \"0\", \"1\", \"2\", \"3\" on what is the optimal next step.\\nOutput your new short function in backticks using the format below:\\n```python\\ndef strategy(board):\\n    return \"0\" # Example\\n```\\nAll helper functions should be inside def strategy. Only output the short function `strategy`.',\n",
       "   'role': 'user'}],\n",
       " 'answer': 0,\n",
       " 'reasoning_effort': 'low'}"
      ]
     },
     "metadata": {},
     "execution_count": 30
    }
   ],
   "source": [
    "from datasets import Dataset\n",
    "dataset = Dataset.from_list([{\"prompt\" : [{\"role\": \"user\", \"content\": prompt.strip()}], \"answer\" : 0, \"reasoning_effort\": \"low\"}]*1000)\n",
    "maximum_length = len(tokenizer.apply_chat_template([{\"role\": \"user\", \"content\": prompt.strip()}], add_generation_prompt = True))\n",
    "print(maximum_length)\n",
    "dataset[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "9-IOMhVg-2AM"
   },
   "source": [
    "<a name=\"Train\"></a>\n",
    "### Train the model\n",
    "\n",
    "Now set up GRPO Trainer and all configurations! We also support GSPO, GAPO, Dr GRPO and more! Go the Unsloth [Reinforcement Learning Docs](https://docs.unsloth.ai/get-started/reinforcement-learning-rl-guide) for more options.\n",
    "\n",
    "We're also using [TrackIO](https://github.com/gradio-app/trackio) which allows you to visualize all training metrics straight inside the notebook fully locally!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "ptqkXK2D4d6p",
    "outputId": "8a34f394-6ef9-439d-9929-aa889983b4a1"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Unsloth: We now expect `per_device_train_batch_size` to be a multiple of `num_generations`.\n",
      "We will change the batch size of 1 to the `num_generations` of 2\n"
     ]
    }
   ],
   "source": [
    "max_prompt_length = maximum_length + 1 # + 1 just in case!\n",
    "max_completion_length = max_seq_length - max_prompt_length\n",
    "\n",
    "from trl import GRPOConfig, GRPOTrainer\n",
    "training_args = GRPOConfig(\n",
    "    temperature = 1.0,\n",
    "    learning_rate = 5e-5,\n",
    "    weight_decay = 0.001,\n",
    "    warmup_ratio = 0.1,\n",
    "    lr_scheduler_type = \"linear\",\n",
    "    optim = \"adamw_8bit\",\n",
    "    logging_steps = 1,\n",
    "    per_device_train_batch_size = 1,\n",
    "    gradient_accumulation_steps = 1, # Increase to 4 for smoother training\n",
    "    num_generations = 2, # Decrease if out of memory\n",
    "    max_prompt_length = max_prompt_length,\n",
    "    max_completion_length = max_completion_length,\n",
    "    # num_train_epochs = 1, # Set to 1 for a full training run\n",
    "    max_steps = 600,\n",
    "    save_steps = 100,\n",
    "    report_to = \"none\", # Can use Weights & Biases, TrackIO\n",
    "    output_dir = \"outputs\",\n",
    "\n",
    "    # For optional training + evaluation\n",
    "    # fp16_full_eval = True,\n",
    "    # per_device_eval_batch_size = 4,\n",
    "    # eval_accumulation_steps = 1,\n",
    "    # eval_strategy = \"steps\",\n",
    "    # eval_steps = 1,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "r9Mv8UZO5hz-"
   },
   "source": [
    "And let's run the trainer! If you scroll up, you'll see a table of rewards. The goal is to see the `reward` column increase!\n",
    "\n",
    "You might have to wait 150 to 200 steps for any action. You'll probably get 0 reward for the first 100 steps. Please be patient!\n",
    "\n",
    "| Step | Training Loss | reward    | reward_std | completion_length | kl       |\n",
    "|------|---------------|-----------|------------|-------------------|----------|\n",
    "| 1    | 0.000000      | 0.125000  | 0.000000   | 200.000000        | 0.000000 |\n",
    "| 2    | 0.000000      | 0.072375  | 0.248112   | 200.000000        | 0.000000 |\n",
    "| 3    | 0.000000      | -0.079000 | 0.163776   | 182.500000        | 0.000005 |\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "vzOuSVCL_GA9"
   },
   "outputs": [],
   "source": [
    "# For optional training + evaluation\n",
    "# new_dataset = dataset.train_test_split(test_size = 0.01)\n",
    "\n",
    "trainer = GRPOTrainer(\n",
    "    model = model,\n",
    "    processing_class = tokenizer,\n",
    "    reward_funcs = [\n",
    "        function_works,\n",
    "        no_cheating,\n",
    "        strategy_succeeds,\n",
    "    ],\n",
    "    args = training_args,\n",
    "    train_dataset = dataset,\n",
    "\n",
    "    # For optional training + evaluation\n",
    "    # train_dataset = new_dataset[\"train\"],\n",
    "    # eval_dataset = new_dataset[\"test\"],\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "fQhtuwP4cf34"
   },
   "source": [
    "And let's train the model! **NOTE** This might be quite slow! 600 steps takes ~5 hours or longer.\n",
    "\n",
    "[TrackIO](https://github.com/gradio-app/trackio) might be a bit slow to load - wait 2 minutes until the graphs pop up!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "id": "VGRxPdSCcfC3",
    "outputId": "471d9c5f-dd39-4d36-e152-eb03aa8c226b"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stderr",
     "text": [
      "The tokenizer has new PAD/BOS/EOS tokens that differ from the model config and generation config. The model config and generation config were aligned accordingly, being updated with the tokenizer's values. Updated tokens: {'bos_token_id': 199998}.\n",
      "==((====))==  Unsloth - 2x faster free finetuning | Num GPUs used = 1\n",
      "   \\\\   /|    Num examples = 1,000 | Num Epochs = 1 | Total steps = 600\n",
      "O^O/ \\_/ \\    Batch size per device = 2 | Gradient accumulation steps = 1\n",
      "\\        /    Data Parallel GPUs = 1 | Total batch size (2 x 1 x 1) = 2\n",
      " \"-____-\"     Trainable parameters = 1,990,656 of 20,916,747,840 (0.01% trained)\n"
     ]
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "* Running on public URL: https://e870a3fed110b90ddb.gradio.live\n",
      "* Trackio project initialized: huggingface\n",
      "* Trackio metrics logged to: /root/.cache/huggingface/trackio\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ],
      "text/html": [
       "<div><iframe src=\"https://e870a3fed110b90ddb.gradio.live/?project=huggingface&write_token=MAvnKKbzUE5I2EFtjQxbXu76vqxvaNkSbRk1en2PBJc\" width=\"100%\" height=\"1000px\" allow=\"autoplay; camera; microphone; clipboard-read; clipboard-write;\" frameborder=\"0\" allowfullscreen></iframe></div>"
      ]
     },
     "metadata": {}
    },
    {
     "output_type": "stream",
     "name": "stderr",
     "text": [
      "`generation_config` default values have been modified to match model-specific defaults: {'max_length': 131072}. If this is not desired, please set these values explicitly.\n"
     ]
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "* Created new run: dainty-sunset-0\n",
      "def strategy(board):\n",
      "    '''Return a move that merges the most tiles (0=up,1=right,2=down,3=left).'''\n",
      "    size = 4\n",
      "    moves = [0,1,2,3]\n",
      "    best = 0\n",
      "    bestmove = 0\n",
      "    for m in moves:\n",
      "        merged = 0\n",
      "        for i in range(size):\n",
      "            line = []\n",
      "            for j in range(size):\n",
      "                if m == 0: v = board[j][i]\n",
      "                elif m == 1: v = board[i][size-1-j]\n",
      "                elif m == 2: v = board[size-1-j][i]\n",
      "                else: v = board[i][j]\n",
      "                if v: line.append(v)\n",
      "            merged_this = 0\n",
      "            j = 0\n",
      "            while j < len(line)-1:\n",
      "                if line[j] == line[j+1]:\n",
      "                    merged_this += 1\n",
      "                    j += 2\n",
      "                else:\n",
      "                    j += 1\n",
      "            merged += merged_this\n",
      "        if merged > best:\n",
      "            best, bestmove = merged, m\n",
      "    return str(bestmove)\n",
      "Steps = 24 If Done = False\n",
      "\u250c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2510\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;45m  2\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;45m  2\u001b[0m\u2502\n",
      "\u2514\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2518\n",
      "Steps = 13 If Done = False\n",
      "def strategy(board):\n",
      "    # Move mapping: 0=up,1=down,2=left,3=right\n",
      "    def swipe(b,dir):\n",
      "        n=len(b);m=len(b[0]);res=[[0]*m for _ in range(n)]\n",
      "        for i in range(n):\n",
      "            for j in range(m):\n",
      "                r=0 if dir==3 else (n-1 if dir==1 else 0 if dir==0 else m-1)\n",
      "                cell=b[i][j]\n",
      "                if cell==0: continue\n",
      "                if dir==2: # left\n",
      "                    pos=0\n",
      "                    while pos+1<m and res[i][pos+1]==0: pos+=1\n",
      "                elif dir==3: # right\n",
      "                    pos=m-1\n",
      "                    while pos-1>=0 and res[i][pos-1]==0: pos-=1\n",
      "                elif dir==0: # up\n",
      "                    pos=0\n",
      "                    while pos+1<n and res[pos+1][j]==0: pos+=1\n",
      "                else: # down\n",
      "                    pos=n-1\n",
      "                    while pos-1>=0 and res[pos-1][j]==0: pos-=1\n",
      "                # merge\n",
      "                if dir==2 and pos>0 and res[i][pos-1]==cell:\n",
      "                    res[i][pos-1]*=2; pos=pos-1\n",
      "                elif dir==3 and pos<m-1 and res[i][pos+1]==cell:\n",
      "                    res[i][pos+1]*=2; pos=pos+1\n",
      "                elif dir==0 and pos>0 and res[pos-1][j]==cell:\n",
      "                    res[pos-1][j]*=2; pos=pos-1\n",
      "                else: pos=pos\n",
      "                if dir==2: res[i][pos]=cell\n",
      "                elif dir==3: res[i][pos]=cell\n",
      "                elif dir==0: res[pos][j]=cell\n",
      "                else: res[pos][j]=cell\n",
      "        return res\n",
      "    def score(b):\n",
      "        s=0\n",
      "        for row in b:\n",
      "            s+=sum(x for x in row if x>0)\n",
      "        return s\n",
      "    best=-1;best_dir='0'\n",
      "    for d in range(4):\n",
      "        nb=swipe(board,d)\n",
      "        if nb!=board:\n",
      "            val=score(nb)\n",
      "            if val>best:\n",
      "                best=val;best_dir=str(d)\n",
      "    return best_dir\n",
      "\u250c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2510\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;45m  2\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;45m  2\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u2514\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2518\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ],
      "text/html": [
       "\n",
       "    <div>\n",
       "      \n",
       "      <progress value='7' max='600' style='width:300px; height:20px; vertical-align: middle;'></progress>\n",
       "      [  7/600 02:53 < 5:42:15, 0.03 it/s, Epoch 0.01/1]\n",
       "    </div>\n",
       "    <table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       " <tr style=\"text-align: left;\">\n",
       "      <th>Step</th>\n",
       "      <th>Training Loss</th>\n",
       "      <th>reward</th>\n",
       "      <th>reward_std</th>\n",
       "      <th>completions / mean_length</th>\n",
       "      <th>completions / min_length</th>\n",
       "      <th>completions / max_length</th>\n",
       "      <th>completions / clipped_ratio</th>\n",
       "      <th>completions / mean_terminated_length</th>\n",
       "      <th>completions / min_terminated_length</th>\n",
       "      <th>completions / max_terminated_length</th>\n",
       "      <th>kl</th>\n",
       "      <th>rewards / function_works / mean</th>\n",
       "      <th>rewards / function_works / std</th>\n",
       "      <th>rewards / no_cheating / mean</th>\n",
       "      <th>rewards / no_cheating / std</th>\n",
       "      <th>rewards / strategy_succeeds / mean</th>\n",
       "      <th>rewards / strategy_succeeds / std</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>422.000000</td>\n",
       "      <td>272.000000</td>\n",
       "      <td>572.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>422.000000</td>\n",
       "      <td>272.000000</td>\n",
       "      <td>572.000000</td>\n",
       "      <td>0.005267</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.500000</td>\n",
       "      <td>3.535534</td>\n",
       "      <td>402.500000</td>\n",
       "      <td>364.000000</td>\n",
       "      <td>441.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>402.500000</td>\n",
       "      <td>364.000000</td>\n",
       "      <td>441.000000</td>\n",
       "      <td>0.002383</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.500000</td>\n",
       "      <td>3.535534</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.500000</td>\n",
       "      <td>3.535534</td>\n",
       "      <td>371.000000</td>\n",
       "      <td>366.000000</td>\n",
       "      <td>376.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>371.000000</td>\n",
       "      <td>366.000000</td>\n",
       "      <td>376.000000</td>\n",
       "      <td>0.002215</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.500000</td>\n",
       "      <td>3.535534</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>4.949748</td>\n",
       "      <td>525.500000</td>\n",
       "      <td>465.000000</td>\n",
       "      <td>586.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>465.000000</td>\n",
       "      <td>465.000000</td>\n",
       "      <td>465.000000</td>\n",
       "      <td>0.001795</td>\n",
       "      <td>-0.500000</td>\n",
       "      <td>2.121320</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.414214</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.414214</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>5</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>326.500000</td>\n",
       "      <td>288.000000</td>\n",
       "      <td>365.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>326.500000</td>\n",
       "      <td>288.000000</td>\n",
       "      <td>365.000000</td>\n",
       "      <td>0.002651</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table><p>"
      ]
     },
     "metadata": {}
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Unsloth: Will smartly offload gradients to save VRAM!\n",
      "Steps = 4 If Done = False\n",
      "def strategy(board):\n",
      "    def apply(b, d):\n",
      "        n=len(b); res=[[0]*n for _ in range(n)]\n",
      "        for i in range(n):\n",
      "            if d==0: r=[b[j][i] for j in range(n)][::-1]\n",
      "            elif d==1: r=[b[n-1-j][i] for j in range(n)]\n",
      "            elif d==2: r=[b[i][j] for j in range(n)][::-1]\n",
      "            else: r=[b[i][n-1-j] for j in range(n)]\n",
      "            merged=[]\n",
      "            skip=False\n",
      "            for v in r:\n",
      "                if v:\n",
      "                    if not merged or merged[-1]!=v:\n",
      "                        merged.append(v)\n",
      "                    else:\n",
      "                        merged[-1]*=2; merged.append(0)\n",
      "            merged=[x for x in merged if x]\n",
      "            merged+= [0]*(n-len(merged))\n",
      "            if d==0:\n",
      "                for j,v in enumerate(merged): res[n-1-j][i]=v\n",
      "            elif d==1:\n",
      "                for j,v in enumerate(merged): res[j][i]=v\n",
      "            elif d==2:\n",
      "                for j,v in enumerate(merged): res[i][j]=v\n",
      "            else:\n",
      "                for j,v in enumerate(merged): res[i][n-1-j]=v\n",
      "        return res\n",
      "    best=-1; bestm=0\n",
      "    for m in range(4):\n",
      "        nb=apply(board,m)\n",
      "        mx=max(max(row) for row in nb)\n",
      "        if mx>best:\n",
      "            best=mx; bestm=m\n",
      "    return str(bestm)  # 0-up,1-down,2-left,3-right\n",
      "\u250c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2510\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;45m  2\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;45m  2\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u2514\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2518\n",
      "Exception = 'int' object is not iterable\n",
      "Steps = 2 If Done = False\n",
      "def strategy(board):\n",
      "    def compress(row):\n",
      "        new=[x for x in row if x>0]\n",
      "        res=[]\n",
      "        skip=False\n",
      "        for i,v in enumerate(new):\n",
      "            if skip: skip=False; continue\n",
      "            if i+1<len(new) and new[i]==new[i+1]:\n",
      "                res.append(v*2); skip=True\n",
      "            else: res.append(v)\n",
      "        return res+[0]*(4-len(res))\n",
      "    def move(b,dir):\n",
      "        nb=[[b[r][c] for r in range(4)] for c in range(4)] if dir==2 else b\n",
      "        if dir==1: nb=list(reversed(nb))\n",
      "        res=[[0]*4 for _ in range(4)]\n",
      "        for r in range(4):\n",
      "            res[r]=compress(nb[r])\n",
      "        if dir==1: res=list(reversed(res))\n",
      "        if dir==3: res=list(zip(*res[::-1]))\n",
      "        if dir==2: res=list(zip(*res))\n",
      "        return [list(row) for row in res]\n",
      "    scores=[]\n",
      "    for d in \"0123\":\n",
      "        nb=move(board, int(d))\n",
      "        scores.append((sum(sum(row) for row in nb), d))\n",
      "    return max(scores)[1]\n",
      "\u250c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2510\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;45m  2\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;45m  2\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u2514\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2518\n",
      "def strategy(board):\n",
      "    import random, itertools\n",
      "    # helper to copy and shift board\n",
      "    def shift(b, dir):\n",
      "        n=4; res=[[0]*n for _ in range(n)]\n",
      "        for i in range(n):\n",
      "            line = [b[i][j] if dir%2==0 else b[j][i] for j in range(n)]\n",
      "            if dir%2==1: line.reverse()\n",
      "            new=[x for x in line if x]\n",
      "            merged=[]\n",
      "            j=0\n",
      "            while j<len(new):\n",
      "                if j+1<len(new) and new[j]==new[j+1]:\n",
      "                    merged.append(new[j]*2); j+=2\n",
      "                else:\n",
      "                    merged.append(new[j]); j+=1\n",
      "            merged += [0]*(n-len(merged))\n",
      "            if dir%2==1: merged.reverse()\n",
      "            for j,x in enumerate(merged):\n",
      "                if dir%2==0: res[i][j]=x\n",
      "                else: res[j][i]=x\n",
      "        return res\n",
      "    def empty(b): return sum(row.count(0) for row in b)\n",
      "    moves=\"0123\"\n",
      "    best=None; bestv=-1\n",
      "    for m in moves:\n",
      "        nb=shift(board,int(m))\n",
      "        v=empty(nb)\n",
      "        if v>bestv: bestv, best=m, v\n",
      "    return best if best is not None else random.choice(moves)\n",
      "Exception = '>' not supported between instances of 'int' and 'str'\n",
      "Steps = 2 If Done = False\n",
      "def strategy(board):\n",
      "    import functools\n",
      "    # SCORE: sum of board weighted by position (desc to keep high tile in corner)\n",
      "    def score(b):\n",
      "        w = [[16,8,4,2],[8,4,2,1],[4,2,1,0.5],[2,1,0.5,0.25]]\n",
      "        return sum(b[i][j]*w[i][j] for i in range(4) for j in range(4))\n",
      "    # Apply move\n",
      "    def move(b, d):\n",
      "        def compress(row):          # slide and merge\n",
      "            new=[x for x in row if x]\n",
      "            merged=[]\n",
      "            i=0\n",
      "            while i<len(new):\n",
      "                if i+1<len(new) and new[i]==new[i+1]:\n",
      "                    merged.append(new[i]*2); i+=2\n",
      "                else:\n",
      "                    merged.append(new[i]); i+=1\n",
      "            return merged+[0]*(4-len(merged))\n",
      "        rot = {0:lambda x:x,\n",
      "               1:lambda x: list(zip(*x[::-1])),\n",
      "               2:lambda x: [row[::-1] for row in x[::-1]],\n",
      "               3:lambda x: [list(row) for row in zip(*x)][::-1]}\n",
      "        inv = {0:lambda x:x,\n",
      "               1:lambda x: [list(row) for row in zip(*x)][::-1],\n",
      "               2:lambda x: [row[::-1] for row in x[::-1]],\n",
      "               3:lambda x: list(zip(*x[::-1]))}\n",
      "        r = rot[d](b)\n",
      "        moved = [compress(row) for row in r]\n",
      "        return inv[d](moved)\n",
      "    best = -1; best_d=0\n",
      "    for d in range(4):\n",
      "        nb = move(board,d)\n",
      "        s = score(nb)\n",
      "        if s>best: best,best_d=s,d\n",
      "    return str(best_d)\n",
      "\u250c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2510\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;45m  2\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;45m  2\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u2514\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2518\n",
      "Steps = 14 If Done = False\n",
      "def strategy(board):\n",
      "    def move(b,dir):\n",
      "        n=len(b); res=[row[:] for row in b]\n",
      "        delta=[(0,1),(1,0),(0,-1),(-1,0)]\n",
      "        dr,dc=delta[dir]\n",
      "        lined=[]\n",
      "        for i in range(n):\n",
      "            line=[]\n",
      "            for j in range(n):\n",
      "                r,c=(i+dr*j)%n,(j+dc*i)%n\n",
      "                if b[r][c]!=0: line.append(b[r][c])\n",
      "            merged=[]\n",
      "            skip=False\n",
      "            for k,x in enumerate(line):\n",
      "                if skip: skip=False; continue\n",
      "                if k+1<len(line) and line[k+1]==x:\n",
      "                    merged.append(x*2); skip=True\n",
      "                else: merged.append(x)\n",
      "            merged+= [0]*(n-len(merged))\n",
      "            for j,v in enumerate(merged):\n",
      "                r,c=(i+dr*j)%n,(j+dc*i)%n\n",
      "                res[r][c]=v\n",
      "        return res\n",
      "    for d in range(4):\n",
      "        if move(board,d)!=board:\n",
      "            return str(d)\n",
      "    return \"0\"\n",
      "\u250c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2510\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;45m  2\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;45m  2\u001b[0m\u2502\n",
      "\u2514\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2518\n",
      "Steps = 8 If Done = False\n",
      "def strategy(board):\n",
      "    # 0: up, 1: down, 2: left, 3: right\n",
      "    N = len(board)\n",
      "    def can_move(dir):\n",
      "        if dir==0: # up\n",
      "            for c in range(N):\n",
      "                for r in range(1,N):\n",
      "                    if board[r][c]!=0 and (board[r-1][c]==0 or board[r-1][c]==board[r][c]): return True\n",
      "        elif dir==1: # down\n",
      "            for c in range(N):\n",
      "                for r in range(N-2,-1,-1):\n",
      "                    if board[r][c]!=0 and (board[r+1][c]==0 or board[r+1][c]==board[r][c]): return True\n",
      "        elif dir==2: # left\n",
      "            for r in range(N):\n",
      "                for c in range(1,N):\n",
      "                    if board[r][c]!=0 and (board[r][c-1]==0 or board[r][c-1]==board[r][c]): return True\n",
      "        else: # right\n",
      "            for r in range(N):\n",
      "                for c in range(N-2,-1,-1):\n",
      "                    if board[r][c]!=0 and (board[r][c+1]==0 or board[r][c+1]==board[r][c]): return True\n",
      "        return False\n",
      "    for d in range(4):\n",
      "        if can_move(d):\n",
      "            return str(d)\n",
      "    return \"0\"\n",
      "\u250c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2510\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;45m  2\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;45m  2\u001b[0m\u2502\n",
      "\u2514\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2518\n",
      "None\n",
      "Steps = 5 If Done = False\n",
      "def strategy(board):\n",
      "    import copy, random\n",
      "    # Meld canned functions\n",
      "    def rotate(b):\n",
      "        return [list(x)[::-1] for x in zip(*b)]\n",
      "    def move(b, dir):\n",
      "        if dir==1:\n",
      "            b=rotate(b)\n",
      "        elif dir==2:\n",
      "            b=[row[::-1] for row in b]\n",
      "        elif dir==3:\n",
      "            b=[row[::-1] for row in zip(*b[::-1])]\n",
      "        new=[ [0]*4 for _ in range(4) ]\n",
      "        for r in range(4):\n",
      "            tmp=[x for x in b[r] if x]\n",
      "            merged=[]\n",
      "            i=0\n",
      "            while i<len(tmp):\n",
      "                if i+1<len(tmp) and tmp[i]==tmp[i+1]:\n",
      "                    merged.append(tmp[i]*2); i+=2\n",
      "                else:\n",
      "                    merged.append(tmp[i]); i+=1\n",
      "            for c,val in enumerate(merged):\n",
      "                new[r][c]=val\n",
      "        # rotate back\n",
      "        if dir==1:\n",
      "            new=rotate(rotate(rotate(new)))\n",
      "        elif dir==2:\n",
      "            new=[row[::-1] for row in new]\n",
      "        elif dir==3:\n",
      "            new=[row[::-1] for row in zip(*new[::-1])]\n",
      "        return new\n",
      "    # evaluate board\n",
      "    def score(b):\n",
      "        s=0\n",
      "        for r in range(4):\n",
      "            for c in range(4):\n",
      "                v=b[r][c]\n",
      "                if v:\n",
      "                    # favor higher values and empties\n",
      "                    s+=v* (1 if c==0 else 0)  # simple heuristic\n",
      "        return s\n",
      "    best=0; bests=[-1]*4\n",
      "    for d in range(4):\n",
      "        nb=move(board,d)\n",
      "        if nb!=board:\n",
      "            bests[d]=score(nb)\n",
      "    return str(bests.index(max(bests))+0)  # return 0-3\n",
      "\u250c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2510\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;45m  2\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u251c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2524\n",
      "\u2502\u001b[38;5;45m  2\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\u001b[38;5;239m  .\u001b[0m\u2502\n",
      "\u2514\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2518\n"
     ]
    }
   ],
   "source": [
    "trainer.train()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "tlaUdxC_VHpz"
   },
   "source": [
    "<a name=\"Inference\"></a>\n",
    "# Inference\n",
    "Now let's try the model we just trained!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "TwZygRdWf8ab"
   },
   "outputs": [],
   "source": [
    "text = tokenizer.apply_chat_template(\n",
    "    [{\"role\": \"user\", \"content\": prompt}],\n",
    "    tokenize = False,\n",
    "    add_generation_prompt = True,\n",
    "    reasoning_effort = \"low\",\n",
    ")\n",
    "\n",
    "from transformers import TextStreamer\n",
    "_ = model.generate(\n",
    "    **tokenizer(text, return_tensors = \"pt\").to(\"cuda\"),\n",
    "    temperature = 1.0,\n",
    "    max_new_tokens = 1024,\n",
    "    streamer = TextStreamer(tokenizer, skip_prompt = False),\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "-NUEmHFSYNTp"
   },
   "source": [
    "<a name=\"Save\"></a>\n",
    "### Saving to float16 or `MXFP4`\n",
    "\n",
    "We also support saving to `float16` directly. Select `merged_16bit` for float16 or `mxfp4` for MXFP4 (OpenAI's GPT-OSS native precision). We also allow `lora` adapters as a fallback. Use `push_to_hub_merged` to upload to your Hugging Face account! You can go to https://huggingface.co/settings/tokens for your personal tokens."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "NjXGTkp7YNtB"
   },
   "outputs": [],
   "source": [
    "# Merge and push to hub in mxfp4 4bit format\n",
    "if False:\n",
    "    model.save_pretrained_merged(\"finetuned_model\", tokenizer, save_method = \"mxfp4\")\n",
    "if False:\n",
    "    model.push_to_hub_merged(\"repo_id/repo_name\", tokenizer, token = \"hf...\", save_method = \"mxfp4\")\n",
    "\n",
    "# Merge and push to hub in 16bit\n",
    "if False:\n",
    "    model.save_pretrained_merged(\"finetuned_model\", tokenizer, save_method = \"merged_16bit\")\n",
    "if False: # Pushing to HF Hub\n",
    "    model.push_to_hub_merged(\"hf/gpt-oss-finetune\", tokenizer, save_method = \"merged_16bit\", token = \"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "V15Yhj1V9lwG"
   },
   "source": [
    "# And we're done!\n",
    "Congratulations you just learned how to do reinforcement learning with GPT-OSS! There were some advanced topics explained in this notebook - to learn more about GPT-OSS and RL, there are more docs in Unsloth's [Reinforcement Learning Guide with GPT-OSS](https://docs.unsloth.ai/new/gpt-oss-reinforcement-learning)\n",
    "\n",
    "This notebook and all Unsloth notebooks are licensed [LGPL-3.0](https://github.com/unslothai/notebooks?tab=LGPL-3.0-1-ov-file#readme)."
   ]
  }
 ],
 "metadata": {
  "accelerator": "GPU",
  "colab": {
   "gpuType": "A100",
   "provenance": [],
   "machine_shape": "hm",
   "include_colab_link": true
  },
  "kernelspec": {
   "display_name": "Python 3",
   "name": "python3"
  },
  "language_info": {
   "name": "python"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "5bf4aba9c1644533a0da3498890c968b": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HBoxModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_c35fa56428cf44a5b40dc72b97c6e1b8",
       "IPY_MODEL_8a66e3473d9d43b2830c1b04b98aab59",
       "IPY_MODEL_bc79bd08b1be479e92ea598172d4eb38"
      ],
      "layout": "IPY_MODEL_fdfd1fbbb5b8436fb0bd832e8fbdcb1a"
     }
    },
    "c35fa56428cf44a5b40dc72b97c6e1b8": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_889854bfc7be4cd7b239f888248143fb",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_d06d6940187349749ec1d8fc6df83368",
      "value": "model.safetensors.index.json:\u2007"
     }
    },
    "8a66e3473d9d43b2830c1b04b98aab59": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "FloatProgressModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_0c29df9994bd446ea64b6fd12c72df5c",
      "max": 1,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_be548d1cb2a74c8d8d1704f83f2b0b71",
      "value": 1
     }
    },
    "bc79bd08b1be479e92ea598172d4eb38": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_53d1cd9cd1254f44a605e4bc8c0b2e09",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_fe54248588764fdca9a71edaa2fd33dc",
      "value": "\u200733.6k/?\u2007[00:00&lt;00:00,\u20073.57MB/s]"
     }
    },
    "fdfd1fbbb5b8436fb0bd832e8fbdcb1a": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "889854bfc7be4cd7b239f888248143fb": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "d06d6940187349749ec1d8fc6df83368": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "0c29df9994bd446ea64b6fd12c72df5c": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": "20px"
     }
    },
    "be548d1cb2a74c8d8d1704f83f2b0b71": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "ProgressStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "53d1cd9cd1254f44a605e4bc8c0b2e09": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "fe54248588764fdca9a71edaa2fd33dc": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "4b721360c9344ee5be0eb5fcf7e9bc71": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HBoxModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_ac56e65282de4cf697ef764bfbdbe073",
       "IPY_MODEL_d21cf40090c14992a31e01b51fe098af",
       "IPY_MODEL_60b0adbf515c4560b05f8f735e2b9c16"
      ],
      "layout": "IPY_MODEL_0ebc4f1a3996476ca66df1e490202ba8"
     }
    },
    "ac56e65282de4cf697ef764bfbdbe073": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_561736050fd84bcab3365fc68885f59c",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_50b3771a4a144a5798d6782a967c5f24",
      "value": "model-00001-of-00009.safetensors:\u2007100%"
     }
    },
    "d21cf40090c14992a31e01b51fe098af": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "FloatProgressModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_d7829f4a99f9485da26f82c98c59d5d4",
      "max": 4504304664,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_e8d618b69e324a489c6754099b17ba01",
      "value": 4504304664
     }
    },
    "60b0adbf515c4560b05f8f735e2b9c16": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_75177debbe8b47dc807057ee748932d5",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_7af1634381ff4595abbcc53d8084c174",
      "value": "\u20074.50G/4.50G\u2007[00:05&lt;00:00,\u20071.29GB/s]"
     }
    },
    "0ebc4f1a3996476ca66df1e490202ba8": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "561736050fd84bcab3365fc68885f59c": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "50b3771a4a144a5798d6782a967c5f24": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "d7829f4a99f9485da26f82c98c59d5d4": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "e8d618b69e324a489c6754099b17ba01": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "ProgressStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "75177debbe8b47dc807057ee748932d5": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "7af1634381ff4595abbcc53d8084c174": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "6e0d900ac8464c9e9dbe45bd2c680ced": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HBoxModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_fd64551b69f54525b5289f8ff48e07d2",
       "IPY_MODEL_bec362a63b3e435f84218f3186719f67",
       "IPY_MODEL_b88aee6989584d8b8cb7907719032455"
      ],
      "layout": "IPY_MODEL_1598c7eb05454a17860d1883e72e330f"
     }
    },
    "fd64551b69f54525b5289f8ff48e07d2": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_1274511cbe584b1fa8012f06e7ce6725",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_f8baf26da54a4fdbb7ad060723aa3193",
      "value": "model-00002-of-00009.safetensors:\u2007100%"
     }
    },
    "bec362a63b3e435f84218f3186719f67": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "FloatProgressModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_5b82f4ecf28046e0ac83e5c8441f56b3",
      "max": 4939127656,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_3606d1496cf0463e9b76ef7511dd4e18",
      "value": 4939127656
     }
    },
    "b88aee6989584d8b8cb7907719032455": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_af1a6c191c9140d1a0408b12805121ab",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_0c975c4cf0d4438b978f7c6dcc5b9f42",
      "value": "\u20074.94G/4.94G\u2007[00:13&lt;00:00,\u2007329MB/s]"
     }
    },
    "1598c7eb05454a17860d1883e72e330f": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "1274511cbe584b1fa8012f06e7ce6725": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "f8baf26da54a4fdbb7ad060723aa3193": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "5b82f4ecf28046e0ac83e5c8441f56b3": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "3606d1496cf0463e9b76ef7511dd4e18": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "ProgressStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "af1a6c191c9140d1a0408b12805121ab": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "0c975c4cf0d4438b978f7c6dcc5b9f42": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "d156a7fab56749638fb42cf8c1feb0f7": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HBoxModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_35513f7ae8c04263a590486de15ecd21",
       "IPY_MODEL_710a38315c4349e7b09180ece8172c44",
       "IPY_MODEL_5d023b1e51184789832030b298ad837f"
      ],
      "layout": "IPY_MODEL_13233dd974e2455b990bfc3e5a9f0329"
     }
    },
    "35513f7ae8c04263a590486de15ecd21": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_1d942aecf17c45f49012a808813736e8",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_54c688b688d34276acbaed77040ce375",
      "value": "model-00003-of-00009.safetensors:\u2007100%"
     }
    },
    "710a38315c4349e7b09180ece8172c44": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "FloatProgressModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_e8d5a44b1d924fd78f516bf1ed84472e",
      "max": 4939127656,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_7c50545149bd44449c1cb5bf36252c52",
      "value": 4939127656
     }
    },
    "5d023b1e51184789832030b298ad837f": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_df1351b818da4b93bb6c88ab7d9dd32b",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_dd3a402129fc40f3838ebeb11f5f770f",
      "value": "\u20074.94G/4.94G\u2007[00:13&lt;00:00,\u2007820MB/s]"
     }
    },
    "13233dd974e2455b990bfc3e5a9f0329": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "1d942aecf17c45f49012a808813736e8": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "54c688b688d34276acbaed77040ce375": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "e8d5a44b1d924fd78f516bf1ed84472e": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "7c50545149bd44449c1cb5bf36252c52": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "ProgressStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "df1351b818da4b93bb6c88ab7d9dd32b": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "dd3a402129fc40f3838ebeb11f5f770f": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "66fe47c90a8a4f7abad4c56baafc4313": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HBoxModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_8b6ea137f3304df3a11f601a2c8d036c",
       "IPY_MODEL_69b7154f12c9481fa5461d11db995305",
       "IPY_MODEL_26683c63f497494b813a1a9fa63b629d"
      ],
      "layout": "IPY_MODEL_70dbf69140d34d9a96e226514a2051be"
     }
    },
    "8b6ea137f3304df3a11f601a2c8d036c": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_4f3cf4c378db49b0a85bf367d0fd7ff0",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_a6f09c0ae12a4869bc6faffcf6d5e7ed",
      "value": "model-00004-of-00009.safetensors:\u2007100%"
     }
    },
    "69b7154f12c9481fa5461d11db995305": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "FloatProgressModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_2d666c00ff51448faf340be6fdc794fe",
      "max": 4939127680,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_5b0e0e2d9f424f1ea64c9ad36842c3a7",
      "value": 4939127680
     }
    },
    "26683c63f497494b813a1a9fa63b629d": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_6d0fa90134544a6bac60021307818edb",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_dc6bc2539cec43ddb0076b4ada70e859",
      "value": "\u20074.94G/4.94G\u2007[00:12&lt;00:00,\u2007389MB/s]"
     }
    },
    "70dbf69140d34d9a96e226514a2051be": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "4f3cf4c378db49b0a85bf367d0fd7ff0": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "a6f09c0ae12a4869bc6faffcf6d5e7ed": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "2d666c00ff51448faf340be6fdc794fe": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "5b0e0e2d9f424f1ea64c9ad36842c3a7": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "ProgressStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "6d0fa90134544a6bac60021307818edb": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "dc6bc2539cec43ddb0076b4ada70e859": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "3d8a9f7a35f847c69d442f11ce30c9a6": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HBoxModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_eda71020a3e44b06ab605aafeffbd79c",
       "IPY_MODEL_8a651636925144989f704a0acfa4db98",
       "IPY_MODEL_4f19aaa6b61a4ceda2b2d6a6035c278e"
      ],
      "layout": "IPY_MODEL_8000cd32f8e14421bd24d29cf0305acf"
     }
    },
    "eda71020a3e44b06ab605aafeffbd79c": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_c3526f40d8424a7390cb9a8adf9ad44e",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_e723541a11e34b4d993035733de95db3",
      "value": "model-00005-of-00009.safetensors:\u2007100%"
     }
    },
    "8a651636925144989f704a0acfa4db98": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "FloatProgressModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_2206b5ba14c440f9ba45eae555bb8c5c",
      "max": 4939127704,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_2b3231a98005442aad2ce3a87783aab7",
      "value": 4939127704
     }
    },
    "4f19aaa6b61a4ceda2b2d6a6035c278e": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_d0c1ed73cd6b4117b47a89b30ff3a966",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_835017cc625a416c8de50c61a949ce82",
      "value": "\u20074.94G/4.94G\u2007[00:13&lt;00:00,\u20071.14GB/s]"
     }
    },
    "8000cd32f8e14421bd24d29cf0305acf": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "c3526f40d8424a7390cb9a8adf9ad44e": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "e723541a11e34b4d993035733de95db3": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "2206b5ba14c440f9ba45eae555bb8c5c": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "2b3231a98005442aad2ce3a87783aab7": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "ProgressStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "d0c1ed73cd6b4117b47a89b30ff3a966": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "835017cc625a416c8de50c61a949ce82": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "5434f2380b9d4f4eaeb546cf84812d19": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HBoxModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_aaedac48923046768b44e3d4d844bb12",
       "IPY_MODEL_da31629201cb4776ad53288495f7dfde",
       "IPY_MODEL_f3365711a36b4a51929deec9264f3e6d"
      ],
      "layout": "IPY_MODEL_2758947ba48a4c56880e002d7a6eae17"
     }
    },
    "aaedac48923046768b44e3d4d844bb12": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_8904f31ab79a4204a4c9215843b41a56",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_6bf64d482f064f669fadb5725cb29568",
      "value": "model-00006-of-00009.safetensors:\u2007100%"
     }
    },
    "da31629201cb4776ad53288495f7dfde": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "FloatProgressModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_dc552770ba1e48e88216961589692b96",
      "max": 4939127704,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_46ebc75c2d5d4e9ab4420d64b10b2911",
      "value": 4939127704
     }
    },
    "f3365711a36b4a51929deec9264f3e6d": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_8d6cedf14a0f44b9bdfd0a494037e0aa",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_1f988f8d8d5143e09a191e000561eb8a",
      "value": "\u20074.94G/4.94G\u2007[00:12&lt;00:00,\u2007671MB/s]"
     }
    },
    "2758947ba48a4c56880e002d7a6eae17": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "8904f31ab79a4204a4c9215843b41a56": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "6bf64d482f064f669fadb5725cb29568": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "dc552770ba1e48e88216961589692b96": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "46ebc75c2d5d4e9ab4420d64b10b2911": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "ProgressStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "8d6cedf14a0f44b9bdfd0a494037e0aa": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "1f988f8d8d5143e09a191e000561eb8a": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "b6ade4c7b5994f73a098021d1c78e0fe": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HBoxModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_a73f82f099e944b68d485212f4a21356",
       "IPY_MODEL_2a362eb07e364e3a95fd3a0c2499b954",
       "IPY_MODEL_282c2898db5c445d83fa60015b5586a4"
      ],
      "layout": "IPY_MODEL_f0a64fe4d44644718fa457250bee4a0e"
     }
    },
    "a73f82f099e944b68d485212f4a21356": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_169f602046834898936aacc5134c0acc",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_ddac49c882c34456afd40c3c6026b4f4",
      "value": "model-00007-of-00009.safetensors:\u2007100%"
     }
    },
    "2a362eb07e364e3a95fd3a0c2499b954": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "FloatProgressModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_6d373bbe2c3446b5be5d9a186058efc8",
      "max": 4939127704,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_34592df2e61143c1845c834c928bbccc",
      "value": 4939127704
     }
    },
    "282c2898db5c445d83fa60015b5586a4": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_a74bf6b5f579495fbcb161c23b1b09bc",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_0a27f46c28b0458f960cdb96fb569fbe",
      "value": "\u20074.94G/4.94G\u2007[00:12&lt;00:00,\u2007389MB/s]"
     }
    },
    "f0a64fe4d44644718fa457250bee4a0e": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "169f602046834898936aacc5134c0acc": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "ddac49c882c34456afd40c3c6026b4f4": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "6d373bbe2c3446b5be5d9a186058efc8": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "34592df2e61143c1845c834c928bbccc": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "ProgressStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "a74bf6b5f579495fbcb161c23b1b09bc": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "0a27f46c28b0458f960cdb96fb569fbe": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "6218c6233a104aa9ba5fd3a89c4bb32b": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HBoxModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_c962891050864a27a06b3257d39218b0",
       "IPY_MODEL_95c69e5a55504be098ad7d7b9334efa9",
       "IPY_MODEL_c6e50485de784ef291a28125e6fcf394"
      ],
      "layout": "IPY_MODEL_4929f73251c243e29ae00de77c34b9d4"
     }
    },
    "c962891050864a27a06b3257d39218b0": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_2f5a7867f59f4830a7499223f3589029",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_fef0a5d82ba74307a5c72e204c3ed391",
      "value": "model-00008-of-00009.safetensors:\u2007100%"
     }
    },
    "95c69e5a55504be098ad7d7b9334efa9": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "FloatProgressModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_c492fdac185d45e285080556808aa66e",
      "max": 4939127704,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_2d8812df8f18443e8f85e8a811c76a39",
      "value": 4939127704
     }
    },
    "c6e50485de784ef291a28125e6fcf394": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_70378127da9d45bbb85a304bd57bfa22",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_29561bf8c8744abb865570a3117c1b06",
      "value": "\u20074.94G/4.94G\u2007[00:19&lt;00:00,\u2007134MB/s]"
     }
    },
    "4929f73251c243e29ae00de77c34b9d4": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "2f5a7867f59f4830a7499223f3589029": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "fef0a5d82ba74307a5c72e204c3ed391": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "c492fdac185d45e285080556808aa66e": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "2d8812df8f18443e8f85e8a811c76a39": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "ProgressStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "70378127da9d45bbb85a304bd57bfa22": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "29561bf8c8744abb865570a3117c1b06": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "8d214427020645cb9afaae009b178df4": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HBoxModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_7f7e817cadf9426580e1ac8f90955e00",
       "IPY_MODEL_20406d14609446d394a628ddf044b819",
       "IPY_MODEL_d57bf34601ed40c8b905d329a86972b9"
      ],
      "layout": "IPY_MODEL_cdaf36709c02408c83cb1253b3df748a"
     }
    },
    "7f7e817cadf9426580e1ac8f90955e00": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_4692c109062940f4b3d5b30519364915",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_6cfe735cc3c541bdb4e70fc115b4d4dc",
      "value": "model-00009-of-00009.safetensors:\u2007100%"
     }
    },
    "20406d14609446d394a628ddf044b819": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "FloatProgressModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_53aebc6467024398aa0761f832d6742c",
      "max": 2751362856,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_d2475adca5b84ccca70a4cdc17bc7d5b",
      "value": 2751362856
     }
    },
    "d57bf34601ed40c8b905d329a86972b9": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_add3f5f8918a44989f331179e79b20f5",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_4bc1fd345e1c4d0693cf92ae50a821d5",
      "value": "\u20072.75G/2.75G\u2007[00:24&lt;00:00,\u2007141MB/s]"
     }
    },
    "cdaf36709c02408c83cb1253b3df748a": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "4692c109062940f4b3d5b30519364915": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "6cfe735cc3c541bdb4e70fc115b4d4dc": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "53aebc6467024398aa0761f832d6742c": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "d2475adca5b84ccca70a4cdc17bc7d5b": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "ProgressStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "add3f5f8918a44989f331179e79b20f5": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "4bc1fd345e1c4d0693cf92ae50a821d5": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "3f4f2de9819e43cdb0190e3f237e0543": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HBoxModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_da26af23bef448fc917b2341fdad9ee4",
       "IPY_MODEL_aed6ead750fb40d0aa7a952b81c7d83b",
       "IPY_MODEL_84908601a5d04f06ab108d1dce1b3dd9"
      ],
      "layout": "IPY_MODEL_aa6ee084bf0142d29ff0dda6561d901c"
     }
    },
    "da26af23bef448fc917b2341fdad9ee4": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_645a96eca4ae4196b1296e6f467fa1a2",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_7000146e85964b70bd5026afe5ac4e24",
      "value": "Loading\u2007checkpoint\u2007shards:\u2007100%"
     }
    },
    "aed6ead750fb40d0aa7a952b81c7d83b": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "FloatProgressModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_a9a176d1db484fcd814d7360c5c5a5ef",
      "max": 9,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_a8457852ed6643c3b3ab27947376a37f",
      "value": 9
     }
    },
    "84908601a5d04f06ab108d1dce1b3dd9": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_6157316ffec24bdfb28dc23db5339c89",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_c7481c2bc72142f998bd094d59a7d688",
      "value": "\u20079/9\u2007[00:12&lt;00:00,\u2007\u20071.23s/it]"
     }
    },
    "aa6ee084bf0142d29ff0dda6561d901c": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "645a96eca4ae4196b1296e6f467fa1a2": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "7000146e85964b70bd5026afe5ac4e24": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "a9a176d1db484fcd814d7360c5c5a5ef": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "a8457852ed6643c3b3ab27947376a37f": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "ProgressStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "6157316ffec24bdfb28dc23db5339c89": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "c7481c2bc72142f998bd094d59a7d688": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "2efabeddb0194391b58397d8fc5e3959": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HBoxModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_9845c5893a4a48d4aafbf8c0b77041f0",
       "IPY_MODEL_8a70c310d8384dc8a16f7b7700b04001",
       "IPY_MODEL_d1b3f92d520d4ecab9549195447bdd1d"
      ],
      "layout": "IPY_MODEL_27e68bf49787461e93430550db80f764"
     }
    },
    "9845c5893a4a48d4aafbf8c0b77041f0": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_decca7dd83b246f889b44c2ae30b4805",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_55ea8e7874064f2788a2cd89f5de2142",
      "value": "generation_config.json:\u2007100%"
     }
    },
    "8a70c310d8384dc8a16f7b7700b04001": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "FloatProgressModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_57c7f59f7f62484aa37d203c8fc781b2",
      "max": 165,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_0a7a4aa2d1124987af64d81acf030934",
      "value": 165
     }
    },
    "d1b3f92d520d4ecab9549195447bdd1d": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_29c0704effcf4deab797c6386f8301ab",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_c7d1f12ee17b46e39c617138e390d70f",
      "value": "\u2007165/165\u2007[00:00&lt;00:00,\u200721.9kB/s]"
     }
    },
    "27e68bf49787461e93430550db80f764": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "decca7dd83b246f889b44c2ae30b4805": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "55ea8e7874064f2788a2cd89f5de2142": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "57c7f59f7f62484aa37d203c8fc781b2": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "0a7a4aa2d1124987af64d81acf030934": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "ProgressStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "29c0704effcf4deab797c6386f8301ab": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "c7d1f12ee17b46e39c617138e390d70f": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "6de5fab961b9462a928dc0bed6ac5bfe": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HBoxModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_251360eb5e6044a88d16c5d16e611c3f",
       "IPY_MODEL_7598552f2109483b93b4ec6a8d996c7f",
       "IPY_MODEL_293d7eb78e954dbe9b7b85a05a3e1643"
      ],
      "layout": "IPY_MODEL_54c131c2a7b540868bb0a77675de3189"
     }
    },
    "251360eb5e6044a88d16c5d16e611c3f": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_fe476fbe0ef149aa81e43bbe54679a1f",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_1e3755c8a331443eb7318588f055802d",
      "value": "tokenizer_config.json:\u2007"
     }
    },
    "7598552f2109483b93b4ec6a8d996c7f": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "FloatProgressModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_7e64a42f0edd479b829693d68cfa5fa1",
      "max": 1,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_b03555559a5e426198a5dd34e73103fa",
      "value": 1
     }
    },
    "293d7eb78e954dbe9b7b85a05a3e1643": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_3ac04aa6fb1b4ee0836931f051d9d675",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_1525171e95b34ba3afe72c101ffdb284",
      "value": "\u20074.20k/?\u2007[00:00&lt;00:00,\u2007450kB/s]"
     }
    },
    "54c131c2a7b540868bb0a77675de3189": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "fe476fbe0ef149aa81e43bbe54679a1f": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "1e3755c8a331443eb7318588f055802d": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "7e64a42f0edd479b829693d68cfa5fa1": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": "20px"
     }
    },
    "b03555559a5e426198a5dd34e73103fa": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "ProgressStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "3ac04aa6fb1b4ee0836931f051d9d675": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "1525171e95b34ba3afe72c101ffdb284": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "b5b772dfa8da48f68d53b246b1b00ab2": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HBoxModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_7b4e3e877d654edcbe7e7ef5bb6c9438",
       "IPY_MODEL_8a77c53d573e4c81a2171d4bfd27abeb",
       "IPY_MODEL_79fc8ee42e2f4d949161d1189ad1f266"
      ],
      "layout": "IPY_MODEL_769309e37fef48e3982f4bb1511dded7"
     }
    },
    "7b4e3e877d654edcbe7e7ef5bb6c9438": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_92f7130be8434cf0a3657db52a41251c",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_78cd75c30f5041c1823f62829c3398ca",
      "value": "tokenizer.json:\u2007100%"
     }
    },
    "8a77c53d573e4c81a2171d4bfd27abeb": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "FloatProgressModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_79222877a7604315be6d2a60080ca2bf",
      "max": 27868174,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_71a0c964a3c14ec99f2244a3b3817608",
      "value": 27868174
     }
    },
    "79fc8ee42e2f4d949161d1189ad1f266": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_d6f06c8f63264db7a8739f3065db4fcb",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_f8d23b83308d470cbc3ba4df6535ba6f",
      "value": "\u200727.9M/27.9M\u2007[00:02&lt;00:00,\u200711.9MB/s]"
     }
    },
    "769309e37fef48e3982f4bb1511dded7": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "92f7130be8434cf0a3657db52a41251c": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "78cd75c30f5041c1823f62829c3398ca": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "79222877a7604315be6d2a60080ca2bf": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "71a0c964a3c14ec99f2244a3b3817608": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "ProgressStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "d6f06c8f63264db7a8739f3065db4fcb": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "f8d23b83308d470cbc3ba4df6535ba6f": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "1352ee0682c54e55a5781c6fc8abba12": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HBoxModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_f4c7c5b4b6ef4458a1ed9b0b7a8781c1",
       "IPY_MODEL_2458c933147c43028b5c0802a18bf66d",
       "IPY_MODEL_8868df0036954450b23d363b4d2d081f"
      ],
      "layout": "IPY_MODEL_3c53f484a22040dc889492741ef9e6a6"
     }
    },
    "f4c7c5b4b6ef4458a1ed9b0b7a8781c1": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_e1544e07d24a47a498609fdd162e7c9c",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_1fce39ba490145a48f9d4eaa8e0f79bb",
      "value": "special_tokens_map.json:\u2007100%"
     }
    },
    "2458c933147c43028b5c0802a18bf66d": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "FloatProgressModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_31ee3c6676e5477e81a4bb8dd4764916",
      "max": 440,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_71aa1f4c38eb45cd8a24b14f2cb3dc66",
      "value": 440
     }
    },
    "8868df0036954450b23d363b4d2d081f": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_9f3860f7bbe64cf88fcddd9aa4f317ce",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_7d3a9f3fd67d40bfba2f69495420d2c8",
      "value": "\u2007440/440\u2007[00:00&lt;00:00,\u200759.0kB/s]"
     }
    },
    "3c53f484a22040dc889492741ef9e6a6": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "e1544e07d24a47a498609fdd162e7c9c": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "1fce39ba490145a48f9d4eaa8e0f79bb": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "31ee3c6676e5477e81a4bb8dd4764916": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "71aa1f4c38eb45cd8a24b14f2cb3dc66": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "ProgressStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "9f3860f7bbe64cf88fcddd9aa4f317ce": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "7d3a9f3fd67d40bfba2f69495420d2c8": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "f5dfe218c4fd4349a2e16d20e9ae0316": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HBoxModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_a74b68761f844f2baebadc4b67211040",
       "IPY_MODEL_df9faed5a91a4848a3ba6b3c5a7a6181",
       "IPY_MODEL_81805e68fa824e6daec3f4d550913add"
      ],
      "layout": "IPY_MODEL_66146935dff9461b8140791bce9f4ccd"
     }
    },
    "a74b68761f844f2baebadc4b67211040": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_4548bdaf76da46cd9fbc6c550bf9bdb1",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_9883600b16204520ad13119c10f07bd0",
      "value": "chat_template.jinja:\u2007"
     }
    },
    "df9faed5a91a4848a3ba6b3c5a7a6181": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "FloatProgressModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_94f0aaac800a4c1d9fbb6b2be9a5ba93",
      "max": 1,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_125d64feafcc4f13a94de2f8c51f80a1",
      "value": 1
     }
    },
    "81805e68fa824e6daec3f4d550913add": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_e7d1b7926c1e4b5e8710a56c379e01ab",
      "placeholder": "\u200b",
      "style": "IPY_MODEL_11ed6ad87ebb4fc2ab8537c283d15630",
      "value": "\u200715.1k/?\u2007[00:00&lt;00:00,\u20071.87MB/s]"
     }
    },
    "66146935dff9461b8140791bce9f4ccd": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "4548bdaf76da46cd9fbc6c550bf9bdb1": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "9883600b16204520ad13119c10f07bd0": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "94f0aaac800a4c1d9fbb6b2be9a5ba93": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": "20px"
     }
    },
    "125d64feafcc4f13a94de2f8c51f80a1": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "ProgressStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "e7d1b7926c1e4b5e8710a56c379e01ab": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "11ed6ad87ebb4fc2ab8537c283d15630": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "state": {}
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}